本課3分30說了,靜態屬性不可以在非靜態方法中調用的,
但是親測,本類中的非靜態方法是可以調用靜態屬性的
使用【靜態屬性的self::屬性名】就可以
首先非常感謝老師的回覆
一、您給的範例程式碼裡面 類別沒有定義test() 這個方法所以實例化會執行錯誤
echo (new Demo )->test(); // "Error"
二、我一直在用的是php7.2的版本練習東西
#您給的程式碼我把(new Demo)->test() 修改成(new Demo)->test2()運行
兩個輸出結果都是peter
是不是證明
#類別的【普通方法】 既可以呼叫【類別的靜態屬性】又可以呼叫類別的【靜態方法】
首先, 感謝你的認真學習態度, 你說得對, 這個地方, 教程中有不嚴謹的地方...
實際上, 普通方法中,直接調用靜態屬性,並不會報錯, 但是絕對不能調用靜態方法,
在普通方法中, 官方也是不推薦使用靜態成員的, 這裡允許使用靜態屬性, 是一個歷史遺留的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"
首先非常感謝老師的回覆
一、您給的範例程式碼裡面 類別沒有定義test() 這個方法所以實例化會執行錯誤
echo (new Demo )->test(); // "Error"
二、我一直在用的是php7.2的版本練習東西
#您給的程式碼我把(new Demo)->test() 修改成(new Demo)->test2()運行
兩個輸出結果都是peter
是不是證明
#類別的【普通方法】 既可以呼叫【類別的靜態屬性】又可以呼叫類別的【靜態方法】
首先, 感謝你的認真學習態度, 你說得對, 這個地方, 教程中有不嚴謹的地方...
實際上, 普通方法中,直接調用靜態屬性,並不會報錯, 但是絕對不能調用靜態方法,
在普通方法中, 官方也是不推薦使用靜態成員的, 這裡允許使用靜態屬性, 是一個歷史遺留的bug, 或許在以後的版本中會修正...
以下是測試程式碼,供您參考:
#