スコープ定義演算子 (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
();
?>
|
|