PHP

【PHP】::(ダブルコロン)【静的メンバにアクセス】

PHPの ::(ダブルコロン) について説明します。

::(ダブルコロン)とは?

静的なメンバにアクセスするときに使う演算子のこと

::(ダブルコロン)とは、静的なメンバにアクセスするときに使う演算子のこと。

静的なプロパティやメソッドにアクセスするときに::(ダブルコロン)を使う
面白いことに、ダブルコロン以外に別称が2つある。1つは「スコープ定義演算子」。もう1つは「Paamayim Nekudotayim

使い方

構文

呼び出し方は、呼び元がどこかによって異なる

  • 同一クラス内から
  • クラス内から
  • クラス内から

呼び元が同一クラス内から

プロパティ

メソッド

呼び元が子クラス内から

プロパティ

メソッド

呼び元が他クラス内から

プロパティ

メソッド

ポイントはシンプルで、同一クラス内からであれば「self::」、子クラス内からであれば「parent::」、他クラス内からであれば「呼出先クラス名::」で呼ぶ

実装例 – 同一クラス内から呼び出し

コード

double-colon-same-class.php

実行結果

流れとしては、Ultramanクラスの静的メソッドlaughを呼び出すと、laughメソッド内で同一クラス内の静的プロパティcountを呼び出し文言((1回目))を改行無しで出力。同一クラス内の静的メソッドclapHandsを呼び出し文言(パチパチパチ!)を改行有りで出力している。2回めのlaughメソッド呼び出しは全体の流れは同じだが、countはインクリメントされている。特に抑えておきたいこととしては、同一クラス内のプロパティcountはself::$countで呼び出せていること。同一クラス内のメソッドclapHandsはself::clapHands()で呼び出せていること2点である。
スコープ定義演算子で呼び出すのは、静的メンバのみにするべき。動的メソッド(インスタンスメソッド)は呼び出せるものの、動的プロパティ(インスタンスプロパティ)はError(※1)になる。
※1 Error文の内容は「PHP Fatal error: Uncaught Error: Access to undeclared static property(静的プロパティとして宣言していないものに、静的アクセスしようとして発生した、致命的なエラー)
仮によく解らない場合、よりシンプルな「実装例 – 他クラス内から」を先に参照してみるのも手かもしれない。

実装例 – 子クラス内から呼び出し

コード

double-colon-super-class.php

Creature.php

 

実行結果

親クラスCreatureの静的メンバを、子クラスHumanの静的メソッドvocalizationから呼び出している。親クラスの静的メンバには、parent::で呼び出せることが解る。

実装例 – 他クラス内から呼び出し

コード

double-colon-simple-another-class.php

実行結果

静的メンバの呼び出しにつき、インスタンスを生成することなく、Babyクラスの静的プロパティhairColorを呼び出すと文言(brown)を出力し、静的メソッドcryを呼び出すと文言(オンギャア!)を出力していることが解る。Babyクラス外からの呼び出しにつき、シンプルである。

参照

独習PHP

公式

PHP: static キーワード – Manual

PHP: スコープ定義演算子 (::) – Manual

PHPを効率的に学習したい場合

スクールを活用するのも有効

PHPを効率的に学習したい場合、スクールを活用するのも有効です。

転職を視野に入れている方、将来に向けて学習を進めている学生の方など、良かったら説明を聴いてみてはいかがでしょうか(説明会の参加は無料です)

オンラインプログラミングスクール「Tech boost

他のスクールについては下記の記事にまとめてあります。他のスクールについても視野に入れたい場合、参考になるかと思います。

【プログラミング】スクール一覧プログラミングのスクールで学ぶことを視野に入れた方向けに、ご紹介します。 転職を視野に入れたい 新卒で入社を視野に入れた...
ダイス
ダイス
ご参考になれば幸いです。
ABOUT ME
ダイス
アラサーSE(20代)。 主な経験は、PGとしてJava(SpringBoot)、C、PHP(Laravel)、VBAがある。SS、UTの経験有り。最近はUI工程を経験中。 IT業界だけでなく、教育業界(予備校での運営スタッフ)での経験有り。 サイトでは、特定の分野に限定せずに幅広く発信していきます。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です