スコープ定義演算子 (Paamayim Nekudotayimとも呼ばれます)または
より簡潔にダブルコロンはトークンで、
static,
定数および
オーバーライドされたクラスのメンバやメソッドにアクセスすることができます。
これらの要素をクラス定義の外から参照する際には、
クラスの名前を使用してください。
Paamayim Nekudotayim は、まず、ダブルコロンの名前としては、奇妙に
思えるでしょう。しかし、Zend Engine 0.5 (PHP 3のエンジン)を
書いている時に、Zendチームはこう呼ぶと決めたのです。
これは、実際には、ヘブライ語でダブルコロンのことなのです!
例 19-12. クラス定義の外から::
<?php class MyClass { const CONST_VALUE = 'A constant value'; }
echo MyClass::CONST_VALUE; ?>
|
|
二つの特別なキーワードself
とparent
がクラス定義の内部からメンバまたはメソッドにアクセスする際に使用されます。
例 19-13. クラス定義の中から::
<?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-14. 親クラスのメソッドをコールする
<?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(); ?>
|
|