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

スコープ定義演算子 (Paamayim Nekudotayimとも呼ばれます)または より簡潔にダブルコロンはトークンで、 static, 定数および オーバーライドされたクラスのメンバやメソッドにアクセスすることができます。

これらの要素をクラス定義の外から参照する際には、 クラスの名前を使用してください。

Paamayim Nekudotayim は、まず、ダブルコロンの名前としては、奇妙に 思えるでしょう。しかし、Zend Engine 0.5 (PHP 3のエンジン)を 書いている時に、Zendチームはこう呼ぶと決めたのです。 これは、実際には、ヘブライ語でダブルコロンのことなのです!

例 19-11. クラス定義の外から::

<?php
class MyClass {
    const
CONST_VALUE = 'A constant value';
}

echo
MyClass::CONST_VALUE;
?>

二つの特別なキーワードselfparent がクラス定義の内部からメンバまたはメソッドにアクセスする際に使用されます。

例 19-12. クラス定義の中から::

<?php
class OtherClass extends MyClass
{
    
public static $my_static = 'static var';

    
public static function doubleColon() {
        echo
parent::CONST_VALUE . "\n";
        echo
self::$my_static . "\n";
    }
}

OtherClass::doubleColon();
?>

拡張されたクラスが親クラスのメソッドの定義をオーバーライドする際、 PHPは親クラスのメソッドをコールしません。 親クラスのメソッドをコールするかしないかは、 拡張されたクラスに責任があります。 これは、コンストラクタおよびデストラクタ, オーバーロード, そして マジック メソッドの定義にも 適用されます。

例 19-13. 親クラスのメソッドをコールする

<?php
class MyClass
{
    
protected function myFunc() {
        echo
"MyClass::myFunc()\n";
    }
}

class
OtherClass extends MyClass
{
    
// Override parent's definition
    
public function myFunc()
    {
        
// But still call the parent function
        
parent::myFunc();
        echo
"OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();
?>