《PHP8上級試験対策》スコープ定義演算子(::)でクラス定数やstatic要素にアクセスする方法

  • URLをコピーしました!

はじめに

PHPでクラス定数やstaticプロパティ、staticメソッドにアクセスする際には、スコープ定義演算子(::)を使います。今回は「クラス定数とstaticメソッドを組み合わせたコード例」を通して、その挙動を整理してみましょう。さらに、試験でひっかかりやすい「誤答パターン」との比較も紹介します。

キーワード: スコープ定義演算子 / クラス定数 / staticメソッド / self:: /

目次

スコープ定義演算子(::)とは

PHPには「スコープ定義演算子(::)」が用意されており、以下の用途に使われます。

  • クラス定数へのアクセス
  • staticプロパティへのアクセス
  • staticメソッドの呼び出し
  • 親クラスのメソッド呼び出し(parent::

オブジェクトを生成せずとも「クラスに紐づいた要素」を参照できるのが特徴です。

正しいコード例

<?php
declare(strict_types=1);
error_reporting(-1);

class Hoge {
    public const NUM = 123;
    public static function func() {
        echo __METHOD__ , "," , self::NUM , "\n";
    }
}

Hoge::func();

実行結果

Hoge::func,123

ポイント解説

Hoge::func();
  → クラスHogestaticメソッドを呼び出している。

__METHOD__
  → 現在のメソッドの完全修飾名を返す。
  → この場合は Hoge::func

self::NUM
  → 同じクラス内にある定数NUMを参照する。
  → 値は 123

試験でひっかかりやすい「誤答パターン」

PHP8上級試験では、self:: / static:: / $this-> の使い分けを問う問題が頻出です。
以下の誤答例と比較してみましょう。

誤答例1: $this->NUM を使ってしまう

class Hoge {
    public const NUM = 123;
    public function func() {
        echo $this->NUM;
    }
}
(new Hoge)->func();

実行結果:

Fatal error: Uncaught Error: Undefined property: Hoge::$NUM

理由:クラス定数は $this-> でアクセスできない。:: が必須。


誤答例2: static::NUM と書き換える

class Hoge {
    public const NUM = 123;
    public static function func() {
        echo static::NUM;
    }
}
Hoge::func();

実行結果:

123
  • 一見正しいが、static::後から継承したクラスでオーバーライド可能 な「遅延静的束縛」になる。
  • 試験問題では「self::static:: の違い」を問うケースがよく出るので注意。

まとめ

  • :: はクラスの「静的な要素」へアクセスするための演算子。
  • クラス定数・staticメソッド・staticプロパティ・親クラスの要素を呼び出すときに使用する。
  • self:: は「そのクラス自身」を指し、static:: は「継承先クラス」を意識した呼び出しになる。
  • $this-> と混同しやすいが、インスタンス経由ではクラス定数にアクセスできない。

今回の例では、正しく Hoge::func,123 と出力されるため、問題文の記述は正しい。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次