PHP 手冊 (類與物件) 學習筆記八:範圍解析操作符 ( :: )

小彭友發表於2020-06-01

描述:

  • 範圍解析操作符(也可稱作 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 協議》,轉載必須註明作者和本文連結

相關文章