范圍解析操作符(也可稱(chēng)作 Paamayim Nekudotayim)或者更簡(jiǎn)單地說(shuō)是一對(duì)冒號(hào),可以用于訪問(wèn)靜態(tài)成員,類(lèi)常量,還可以用于覆蓋類(lèi)中的屬性和方法。
當(dāng)在類(lèi)定義之外引用到這些項(xiàng)目時(shí),要使用類(lèi)名。
可以通過(guò)變量來(lái)引用類(lèi),該變量的值不能是關(guān)鍵字(如
self
,parent
和 static
)。
把 Paamayim Nekudotayim 選作雙冒號(hào)操作符的名字似乎有些奇怪。然而,這是 Zend 開(kāi)發(fā)小組在寫(xiě) Zend Engine 0.5(被用于 PHP 3 中)時(shí)所作出的決定。事實(shí)上這個(gè)詞在希伯萊文就是雙冒號(hào)的意思。
示例 #1 在類(lèi)的外部使用 :: 操作符
<?php
class MyClass {
const CONST_VALUE = 'A constant value';
}
$classname = 'MyClass';
echo $classname::CONST_VALUE;
echo MyClass::CONST_VALUE;
?>
self,parent 和 static 這三個(gè)特殊的關(guān)鍵字是用于在類(lèi)定義的內(nèi)部對(duì)其屬性或方法進(jìn)行訪問(wèn)的。
示例 #2 在類(lèi)定義內(nèi)部使用 ::
<?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";
}
}
$classname = 'OtherClass';
$classname::doubleColon();
OtherClass::doubleColon();
?>
當(dāng)一個(gè)子類(lèi)覆蓋其父類(lèi)中的方法時(shí),PHP 不會(huì)調(diào)用父類(lèi)中已被覆蓋的方法。是否調(diào)用父類(lèi)的方法取決于子類(lèi)。這種機(jī)制也作用于構(gòu)造函數(shù)和析構(gòu)函數(shù),重載以及魔術(shù)方法。
示例 #3 調(diào)用父類(lèi)的方法
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// 覆蓋了父類(lèi)的定義
public function myFunc()
{
// 但還是可以調(diào)用父類(lèi)中被覆蓋的方法
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>
參見(jiàn) 偽變量的示例。