範圍解析運算子(也可稱為 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()