PHP 範囲解決演算子 (::)

伊谢尔伦
伊谢尔伦オリジナル
2016-11-23 14:13:351175ブラウズ

スコープ解決演算子 (Paamayim Nekudotayim とも呼ばれます)、またはもっと単純にコロンのペアを使用して、静的メンバーやクラス定数にアクセスしたり、クラス内のプロパティやメソッドをオーバーライドしたりするために使用することもできます。

クラス定義の外でこれらの項目を参照する場合は、クラス名を使用します。

PHP 5.3.0 以降、クラスは変数を通じて参照できますが、変数の値をキーワード (self、parent、static など) にすることはできません。

二重コロン演算子の名前として Paamayim Nekudotayim を選択したのは少し奇妙に思えます。ただし、これは Zend 開発チームが Zend Engine 0.5 (PHP 3 で使用) を作成したときに下した決定でした。実際、この単語はヘブライ語で二重コロンを意味します。

例 #1 クラス外で :: 演算子を使用する

class MyClass
{
    const CONST_VALUE = 1;
}
$classname = 'MyClass';
echo $classname::CONST_VALUE; //自PHP5.3.0起
echo MyClass::CONST_VALUE;

3 つの特別なキーワード self、parent、static は、クラス定義内のプロパティまたはメソッドにアクセスするために使用されます。

例 #2 クラス定義内で使用::

function __autoload($classname){
    require_once($classname.".php");
}
class OtherClass extends MyClass
{
    public static $my_static = 1;
    public static function doubleColon(){
        echo parent::CONST_VALUE.&#39;<br>&#39;;
        echo self::$my_static,&#39;<br>&#39;;
    }
}
$classname = &#39;OtherClass&#39;;
echo $classname::doubleColon();
OtherClass::doubleColon();

サブクラスが親クラスのメソッドをオーバーライドする場合、PHP は親クラスでオーバーライドされたメソッドを呼び出しません。親クラスのメソッドを呼び出すかどうかは子クラスに依存します。このメカニズムは、コンストラクターとデストラクター、オーバーロード、およびマジック メソッドでも機能します。

例 #3 親クラスのメソッドを呼び出す

class MyClass
{
    protected function myFunc()
    {
        echo &#39;MyClass::myFunc()<br>&#39;;
    }
}
class OtherClass extends MyClass
{
    //覆盖了父类的定义
    public function myFunc()
    {
        //但还是可以调用父类中被覆盖的方法
        parent::myFunc();
        echo &#39;OtherClass::myFunc()<br>&#39;;
    }
}
$class = new OtherClass();
$class -> myFunc();

出力結果:

MyClass::myFunc()

OtherClass::myFunc()


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。