zoukankan      html  css  js  c++  java
  • php 范围解析操作符

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

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

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

    把 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  .  " " ;
            echo  self :: $my_static  .  " " ;
        }
    }

    $classname  =  'OtherClass' ;
    echo  $classname :: doubleColon ();  // 自 PHP 5.3.0 起

    OtherClass :: doubleColon ();
    ?>

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

    Example #3 调用父类的方法

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

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

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

    参见 伪变量的示例

  • 相关阅读:
    浅析C#中的Thread ThreadPool Task和async/await
    C#中的集合类型
    WPF: StaticResource vs DynamicResource
    .NET程序员需要了解的概念、名词、术语--持续更新
    VisualStudio常见问题
    一些有用的.NET开源库--持续更新
    在MSBuild中使用Task实现自动引用指定版本的NuGet包
    C#与JMS的连接问题
    EventLog学习记录
    windows app设计原则总结-持续更新...
  • 原文地址:https://www.cnblogs.com/zx997/p/7441528.html
Copyright © 2011-2022 走看看