オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、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を学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

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

// 人間クラスを定義
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を使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。