范圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用于訪問靜態(tài)成員,類常量,還可以用于覆蓋類中的屬性和方法。
當(dāng)在類定義之外引用到這些項目時,要使用類名。
自 PHP 5.3.0 起,可以通過變量來引用類,該變量的值不能是關(guān)鍵字(如 self,parent 和 static)。
在類的外部使用 :: 操作符:
<?php
class MyClass {
const CONST_VALUE = 'A constant value';
}
$classname = 'MyClass';
echo $classname::CONST_VALUE; // 自 PHP 5.3.0 起
echo MyClass::CONST_VALUE;
?>
self,parent 和 static 這三個特殊的關(guān)鍵字是用于在類定義的內(nèi)部對其屬性或方法進(jìn)行訪問的。
在類定義內(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';
echo $classname::doubleColon(); // 自 PHP 5.3.0 起
OtherClass::doubleColon();
?>
當(dāng)一個子類覆蓋其父類中的方法時,PHP 不會調(diào)用父類中已被覆蓋的方法。是否調(diào)用父類的方法取決于子類。這種機制也作用于[構(gòu)造函數(shù)和析構(gòu)函數(shù)],[重載]以及[魔術(shù)方法]。
調(diào)用父類的方法:
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// 覆蓋了父類的定義
public function myFunc()
{
// 但還是可以調(diào)用父類中被覆蓋的方法
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>