搜尋

首頁  >  問答  >  主體

靜態屬性是可以在非靜態方法中呼叫的

本課3分30說了,靜態屬性不可以在非靜態方法中調用的,

但是親測,本類中的非靜態方法是可以調用靜態屬性的

使用【靜態屬性的self::屬性名】就可以

God_LikeGod_Like2092 天前2231

全部回覆(3)我來回復

  • God_Like

    God_Like2019-04-15 17:18:21

    首先非常感謝老師的回覆

    一、您給的範例程式碼裡面  類別沒有定義test() 這個方法所以實例化會執行錯誤

    echo (new Demo )->test();    // "Error" 

    二、我一直在用的是php7.2的版本練習東西

    #您給的程式碼我把(new Demo)->test() 修改成(new Demo)->test2()運行

    兩個輸出結果都是peter

    是不是證明

    #類別的【普通方法】 既可以呼叫【類別的靜態屬性】又可以呼叫類別的【靜態方法】

    回覆
    0
  • 天蓬老师

    天蓬老师2019-04-14 22:23:30

    首先, 感謝你的認真學習態度, 你說得對, 這個地方, 教程中有不嚴謹的地方...

    實際上, 普通方法中,直接調用靜態屬性,並不會報錯, 但是絕對不能調用靜態方法, 

    在普通方法中, 官方也是不推薦使用靜態成員的, 這裡允許使用靜態屬性, 是一個歷史遺留的bug, 或許在以後的版本中會修正...

    以下是測試程式碼,供您參考:

    class Demo
    {
        // 静态属性
        public static $name = 'peter';
        
        // 静态方法
        public static function hello()
        {
           return self::$name;
        }
        
        //  普通方法1
        public function test1()
        {
            return self::$name;
        }
        
        //  普通方法1
        public function test2()
        {
            return self::hello();
        }
    }
    
    echo (new Demo)->test1();    // "peter"
    echo '<hr>';
    echo (new Demo)->test();    // "Error"


    #

    回覆
    1
  • 取消回覆