范围解析操作符(::)

范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。

当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。

把 Paamayim Nekudotayim 选作该操作符的名字似乎有些奇怪。然而,这是 Zend 开发小组在写 Zend Engine 0.5 (被用于 PHP 3 中)时所作出的决定。事实上这个词在希伯莱文就是双冒号的意思。

例 10.11. 在类的外部使用 :: 操作符

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

echo
MyClass::CONST_VALUE;
?>

selfparent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。

例 10.12. :: from inside the class definition

<?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";
   }
}

OtherClass::doubleColon();
?>

当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止。这种机制也作用于 构造函数和析构函数重载魔术 函数。

例 10.13. 调用父类的方法

<?php
class MyClass
{
   protected function
myFunc() {
       echo
"MyClass::myFunc()\n";
   }
}

class
OtherClass extends MyClass
{
   
// &#35206;&#30422;&#29238;&#31867;&#20013;&#30340;&#26041;&#27861;
   
public function myFunc()
   {
       
// &#20294;&#20173;&#28982;&#21487;&#20197;&#35843;&#29992;&#24050;&#34987;&#35206;&#30422;&#30340;&#26041;&#27861;
       
parent::myFunc();
       echo
"OtherClass::myFunc()\n";
   }
}

$class = new OtherClass();
$class->myFunc();
?>