範圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用於訪問靜態成員,類常量,還可以用於覆蓋類中的屬性和方法。
當在類定義之外引用到這些項目時,要使用類名。
自 PHP 5.3.0 起,可以通過變數來引用類,該變數的值不能是關鍵字(如 self,parent 和 static)。
把 Paamayim Nekudotayim 選作雙冒號操作符的名字似乎有些奇怪。然而,這是 Zend 開發小組在寫 Zend Engine 0.5(被用於 PHP 3 中)時所作出的決定。事實上這個詞在希伯萊文就是雙冒號的意思。
Example #1 在類的外部使用 :: 操作符
class MyClass{ const CONST_VALUE = 1;}$classname = 'MyClass';echo $classname::CONST_VALUE; //自PHP5.3.0起echo MyClass::CONST_VALUE;
self,parent 和 static 這三個特殊的關鍵字是用於在類定義的內部對其屬性或方法進行訪問的。
Example #2 在類定義內部使用 ::
function __autoload($classname){ require_once($classname.".php");}class OtherClass extends MyClass{ public static $my_static = 1; public static function doubleColon(){ echo parent::CONST_VALUE.'<br>'; echo self::$my_static,'<br>'; }}$classname = 'OtherClass';echo $classname::doubleColon();OtherClass::doubleColon();
當一個子類覆蓋其父類中的方法時,PHP 不會調用父類中已被覆蓋的方法。是否調用父類的方法取決於子類。這種機制也作用於建構函式和解構函式,重載以及魔術方法。
Example #3 調用父類的方法
class MyClass{ protected function myFunc() { echo 'MyClass::myFunc()<br>'; }}class OtherClass extends MyClass{ //覆蓋了父類的定義 public function myFunc() { //但還是可以調用父類中被覆蓋的方法 parent::myFunc(); echo 'OtherClass::myFunc()<br>'; }}$class = new OtherClass();$class -> myFunc();
輸出結果:
MyClass::myFunc()
OtherClass::myFunc()