您的位置:首页 > 编程语言 > PHP开发

php 范围解析操作符

2020-03-02 01:14 711 查看

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

当在类定义之外引用到这些项目时,要使用类名。

自 PHP 5.3.0 起,可以通过变量来引用类,该变量的值不能是关键字(如 self,parent 和 static)。

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

Example #1 在类的外部使用 :: 操作符

<?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 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。

Example #2 在类定义内部使用 ::

<?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 ();
?>

当一个子类覆盖其父类中的方法时,PHP 不会调用父类中已被覆盖的方法。是否调用父类的方法取决于子类。这种机制也作用于构造函数和析构函数,重载以及魔术方法。

Example #3 调用父类的方法

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

class  OtherClass  extends  MyClass
{
     // 覆盖了父类的定义
     public function  myFunc ()
    {
         // 但还是可以调用父类中被覆盖的方法
         parent :: myFunc ();
        echo  "OtherClass::myFunc()\n" ;
    }
}

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

参见 伪变量的示例。

转载于:https://www.cnblogs.com/zx997/p/7441528.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
anmo5970 发布了0 篇原创文章 · 获赞 0 · 访问量 23 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: