Static(靜態)與Final(終止)關鍵字 – PHP面向對象編程(OOP)

    PHP類中常用的兩個關鍵字

    Static 關鍵字

    1. 聲明類屬性或方法為 static(靜態),就可以不實例化類而直接訪問。
    2. 靜態屬性不能通過一個類已實例化的對象來訪問(但靜態方法可以)。
    3. 由于靜態方法不需要通過對象即可調用,所以偽變量 $this 在靜態方法中不可用。
    4. 靜態屬性不可以由對象通過 -> 操作符來訪問。

    靜態方法

    <?php
    class Foo {
        public static function aStaticMethod() {
            // ...
           echo "Hello";
        }
    }
    
    Foo::aStaticMethod();
    $classname = 'Foo';
    $classname::aStaticMethod();
    ?>

    執行以上程序,輸出結果為:

    HelloHello

    靜態屬性

    靜態屬性使用?范圍解析操作符?(?::?)訪問,不能通過對象操作符(?->?)訪問。

    通過變量來引用一個類是可行的,但這個變量的值不能是一個保留字 (例如selfparent和?static

    自 PHP 5.3.0 起,可以用一個變量來動態調用類。但該變量的值不能為關鍵字 self,parent 或 static。

    <?php
    class Foo
    {
        public static $my_static = 'foo';
    
        public function staticValue() {
            return self::$my_static;
        }
    }
    
    class Bar extends Foo
    {
        public function fooStatic() {
            return parent::$my_static;
        }
    }
    
    
    print Foo::$my_static . "n";
    
    $foo = new Foo();
    print $foo->staticValue() . "n";
    print $foo->my_static . "n";      // 未定義的 "屬性" my_static
    
    print $foo::$my_static . "n";
    $classname = 'Foo';
    print $classname::$my_static . "n";
    
    print Bar::$my_static . "n";
    $bar = new Bar();
    print $bar->fooStatic() . "n";
    ?>

    執行以上程序,輸出結果為:

    foo
    foo
    
    Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
    
    Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
    
    foo
    foo
    foo
    foo

    靜態實戰實例

    <?php
    class Foo {
      public static $my_static = 'foo';
      
      public function staticValue() {
         return self::$my_static;
      }
    }
    
    print Foo::$my_static . PHP_EOL;
    $foo = new Foo();
    
    print $foo->staticValue() . PHP_EOL;
    ?>????

    執行以上程序,輸出結果為:

    foo
    foo

    Final 關鍵字

    PHP 5 新增了一個 final 關鍵字。如果父類中的方法被聲明為 final,則子類無法覆蓋該方法。如果一個類被聲明為 final,則不能被繼承。

    以下代碼執行會報錯:

    <?php
    class BaseClass {
       public function test() {
           echo "BaseClass::test() called" . PHP_EOL;
       }
       
       final public function moreTesting() {
           echo "BaseClass::moreTesting() called"  . PHP_EOL;
       }
    }
    
    class ChildClass extends BaseClass {
       public function moreTesting() {
           echo "ChildClass::moreTesting() called"  . PHP_EOL;
       }
    }
    // 報錯信息 Fatal error: Cannot override final method BaseClass::moreTesting()
    ?>

    參考文章

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 一区二区三区视频| 国产精品第一区揄拍| 国产在线第一区二区三区| 在线一区二区观看| 91精品一区国产高清在线| 亚洲一区二区三区免费视频| 国产伦精品一区二区三区免费迷| 丰满少妇内射一区| 欧洲精品码一区二区三区| 久久久精品一区二区三区| 老鸭窝毛片一区二区三区| 极品尤物一区二区三区| 无码人妻精品一区二区三区久久| 国模少妇一区二区三区| 国产一区二区影院| 精品一区二区91| 无码精品视频一区二区三区| 麻豆亚洲av熟女国产一区二| 日本高清天码一区在线播放| 精品亚洲一区二区三区在线播放| 亚洲Av永久无码精品一区二区 | 国产精品一区二区久久国产| 精品国产亚洲一区二区三区在线观看 | 竹菊影视欧美日韩一区二区三区四区五区 | 久久精品国产亚洲一区二区三区 | 国产区精品一区二区不卡中文| 国产精品香蕉在线一区| 无码一区二区三区视频| 日本一区二区三区在线视频| 99久久精品费精品国产一区二区| 亚洲老妈激情一区二区三区| 精品一区二区三区在线视频| 亚洲无线码一区二区三区| 无码少妇一区二区三区| 无码囯产精品一区二区免费| 亚洲Av无码一区二区二三区| 国模视频一区二区| 国产精品无码一区二区在线观一| 亚洲日韩激情无码一区| 日韩精品无码中文字幕一区二区 | 日本一区二区视频|