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()
    ?>

    參考文章

    php

    PHP面向對象編程(OOP)

    2022-8-24 18:18:37

    php

    調用父類構造方法 - PHP面向對象編程(OOP)

    2022-8-25 14:56:51

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 亚洲A∨精品一区二区三区下载| 香蕉久久一区二区不卡无毒影院| 日韩电影一区二区| 97久久精品无码一区二区| 免费看无码自慰一区二区| 亚洲av色香蕉一区二区三区蜜桃| 成人区人妻精品一区二区不卡网站| 亚洲一区二区影院| 色狠狠一区二区三区香蕉蜜桃| 精品国产一区二区二三区在线观看| 日本精品高清一区二区| 欧洲亚洲综合一区二区三区| 精品一区二区视频在线观看| 国产亚洲无线码一区二区| 日韩精品无码一区二区视频| 国产美女视频一区| 无码人妻精品一区二区蜜桃| 亚洲不卡av不卡一区二区| 亚洲日本乱码一区二区在线二产线 | 2018高清国产一区二区三区| 日本高清不卡一区| 国产一区二区三区不卡观| 寂寞一区在线观看| 午夜天堂一区人妻| 亚洲视频一区二区在线观看| 精品深夜AV无码一区二区| 久久久久人妻一区二区三区| 中文字幕一区二区三匹| 日韩一区二区三区四区不卡| 精品一区二区三区四区在线播放| 亚洲一区二区三区91 | 午夜精品一区二区三区在线观看| 精品日韩一区二区| 精品女同一区二区| 国产精品一区二区av| 久久久久人妻精品一区| 亚洲一区AV无码少妇电影| 免费一区二区三区四区五区| 精品一区二区三区色花堂| 高清一区二区三区免费视频| 精品无码成人片一区二区98|