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 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 无码精品一区二区三区免费视频| 日韩电影一区二区三区| 久久久国产精品亚洲一区| 美女视频在线一区二区三区| 春暖花开亚洲性无区一区二区| 无码人妻精品一区二区三区9厂| 久久国产免费一区| 日本午夜精品一区二区三区电影| 久久久久人妻一区精品性色av| 亚洲色偷精品一区二区三区| 四虎成人精品一区二区免费网站| 日本精品一区二区三区在线视频 | 狠狠色成人一区二区三区| 熟女少妇丰满一区二区| 国产精品视频分类一区| 日韩精品人妻一区二区中文八零| 丝袜人妻一区二区三区| 久久国产精品一区免费下载| 久久久精品一区二区三区| 国产福利精品一区二区| 人妻AV中文字幕一区二区三区| 韩国精品一区视频在线播放| 国产成人无码AV一区二区| 亚洲AV综合色区无码一区爱AV| 中文字幕亚洲一区二区三区| 中文字幕视频一区| 蜜臀AV一区二区| 国产高清在线精品一区二区三区| 亲子乱AV视频一区二区| 成人毛片一区二区| 香蕉免费一区二区三区| 乱中年女人伦av一区二区| 日韩av无码一区二区三区| 日本一道高清一区二区三区| 中文字幕亚洲乱码熟女一区二区| 日本精品一区二区在线播放| 麻豆亚洲av熟女国产一区二| 精品国产毛片一区二区无码| 国模大胆一区二区三区| 亚洲视频在线一区二区三区| 中文字幕一区二区三区精华液|