PHP 手册 (类与对象) 学习笔记八:范围解析操作符 ( :: )

描述:

  • 范围解析操作符(也可称作 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 = 'a constant value';
    }
    $classname = 'MyClass';
    echo $classname::CONST_VALUE;
    echo MyClass::CONST_VALUE;
  • selfparentstatic 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。

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

    class MyClass
    {
        const CONST_VALUE = 'a constant value';
    }

    class OtherClass extends MyClass
    {
        public static $my_static = 'static var';

        public static function doubleColon()
        {
            echo parent::CONST_VALUE, PHP_EOL;
            echo self::$my_static, PHP_EOL;
        }
    }

    $classname = 'OtherClass';
    $classname::doubleColon();
    OtherClass::doubleColon();
    /*
     a constant value
     static var
     a constant value
     static var
     */
  • 当一个子类覆盖其父类中的方法时,PHP 不会调用父类中已被覆盖的方法。是否调用父类的方法取决于子类。这种机制也作用于构造函数和析构函数,重载以及魔术方法。

Example 3: 调用父类的方法

    class MyClass
    {
        protected function MyFunc()
        {
            echo "MyClass MyFunc\n";
        }
    }

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

    $o = new OtherClass;
    $o->MyFunc();
   /*
     MyClass MyFunc
     OtherClass MyFunc
   */

附手册地址

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!