范圍解析操作符 (::)

范圍解析操作符(也可稱作 Paamayim Nekudotayim)或者更簡單地說是一對冒號,可以用于訪問靜態(tài)成員,類常量,還可以用于覆蓋類中的屬性和方法。

當(dāng)在類定義之外引用到這些項目時,要使用類名。

可以通過變量來引用類,該變量的值不能是關(guān)鍵字(如 self,parentstatic)。

把 Paamayim Nekudotayim 選作雙冒號操作符的名字似乎有些奇怪。然而,這是 Zend 開發(fā)小組在寫 Zend Engine 0.5(被用于 PHP 3 中)時所作出的決定。事實上這個詞在希伯萊文就是雙冒號的意思。

示例 #1 在類的外部使用 :: 操作符

<?php
class MyClass {
    const 
CONST_VALUE 'A constant value';
}

$classname 'MyClass';
echo 
$classname::CONST_VALUE;

echo 
MyClass::CONST_VALUE;
?>

self,parentstatic 這三個特殊的關(guān)鍵字是用于在類定義的內(nèi)部對其屬性或方法進(jìn)行訪問的。

示例 #2 在類定義內(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)一個子類覆蓋其父類中的方法時,PHP 不會調(diào)用父類中已被覆蓋的方法。是否調(diào)用父類的方法取決于子類。這種機(jī)制也作用于構(gòu)造函數(shù)和析構(gòu)函數(shù),重載以及魔術(shù)方法。

示例 #3 調(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();
?>

參見 偽變量的示例