概念を理解!PHPでstatic変数を使う方法【初心者向け】

初心者向けにPHPでstatic変数を使う方法について解説しています。static変数とインスタンス変数の違いを学びましょう。例を元に詳しく解説しているので、概念が理解しにくい人もイメージできるはずです。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPでstatic変数を使う方法について解説します。

たとえを元に概念を解説しているので、初心者の方はイメージしながら理解ができるはずです。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでstatic変数を使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

static変数とは

staticという概念は、クラスを扱う際に意識する必要があります。

クラスには、メンバ(プロパティ)と呼ばれるクラスが持つ情報があります。

もし、static修飾子をつけずにメンバを定義すると、それは各インスタンス毎に管理する項目になります。

 

例えば、人間クラスというものを定義します。人間クラスには「名前」というメンバを持つと定義を行います。

それでは人間クラスからインスタンス化を行い、「青木」という名前を持つインスタンスを作成します。

この時点で1人の青木という名前の人間が存在しています。

ではもう一度、人間クラスからインスタンス化を行い、「山田」という名前を持つインスタンスを生成します。

そうすると、

「名前」が青木の人間が1人、「名前」が山田の人間が1人という状況になります。
「名前」がインスタンス毎に管理されているということがわかりますね。

この場合「名前」はインスタンス変数またはローカル変数と呼ばれるメンバになります。

インスタンス変数に対極するものがstatic変数またはクラス変数と呼ばれるもので、これはクラス間で共通して管理する項目になります。インスタンス変数と何が違うか分かりづらいので、また人間クラスで説明します。

人間クラスに新たに「科」という項目を定義します。

人間はヒト科になるので、「科」というプロパティには「ヒト」という値が設定されるべきですね。

「科」は「名前」と違って各インスタンス(個人)で違う値になることが期待されてない項目であります。

なので、上記で登場した「名前」が青木の人間、「名前」が山田の人間はどちらも「科」はヒトという結果になります。

この「科」のような各インスタンス単位でなく、人間クラスとして管理するべき項目がstatic変数/クラス変数と呼ばれるものであると考えてもらって大丈夫です。

クラスを定義後に利用して呼び出す際には、New演算子を利用してインスタンスを生成されますよね。

 

static変数の書き方

それでは何度も出てきた人間クラスを定義は下記の通りになります。

「科」というメンバが$familyにあたり、static修飾子が前についてますね。

// 人間クラスを定義
class Human {

  // メンバ
  public $name;           // 「名前」というインスタンス変数
  public static $family;  // 「科」というstatic変数/クラス変数

}

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

先に出てきた人間クラスをインスタンス化して、動きを確かめてみましょう。

// 人間クラスを定義
class Human {

  // メンバ
  public $name;                     // 「名前」というインスタンス変数
  public static $family = ""ヒト科""; // 「科」というstatic変数/クラス変数

}

// 「名前」が青木という人間
$aoki = new Human();
$aoki->name = ""青木"";

// 「名前」が山田という人間
$yamada = new Human();
$yamada->name = ""山田"";

// static変数はクラスから直接呼び出せます!
echo Human::$family.PHP_EOL;    // ヒト科

// それぞれのインスタンについて確認してみましょう!
echo $aoki->name.PHP_EOL;       // 青木
echo $aoki::$family.PHP_EOL;    // ヒト科
echo $yamada->name.PHP_EOL;     // 山田
echo $yamada::$family.PHP_EOL;  // ヒト科

// static変数を変更してみると、クラスとすべてのインスタンスで共有しているので、全部に影響します!
Human::$family = ""哺乳類"";
echo Human::$family.PHP_EOL;    // 哺乳類
echo $aoki::$family.PHP_EOL;    // 哺乳類
echo $yamada::$family.PHP_EOL;  // 哺乳類
この記事を監修してくれた方

青木 敦史(あおきあつし)
昼間は自社のWebサービスを運営している会社でフロントエンド/バックエンドを担当しているエンジニア。

Webエンジニアの経験は5年ほどです。TechAcademyではPHP/Laravelコースを担当しています。
開発実績: メイクレッスン支援アプリ / 電力自由化パッケージ / 携帯電話料金計算 / ライブチャットサービス

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。