検索

ホームページ  >  に質問  >  本文

静的プロパティは非静的メソッドで呼び出すことができます

このレッスンの 3:30 で述べたように、静的プロパティを非静的メソッドで呼び出すことはできません。

ただし、個人的なテストとして、このクラスの非静的メソッドは静的プロパティを呼び出すことができます

[静的プロパティ self::プロパティ名]を使用してください

God_LikeGod_Like2055日前2198

全員に返信(3)返信します

  • God_Like

    God_Like2019-04-15 17:18:21

    まず、先生のご返信ありがとうございます

    1. ご提供いただいたサンプルコードのクラスにはtest()メソッドが定義されていないため、インスタンス化はエラーで実行されます

    echo (新しいデモ) ->test(); // "エラー"

    第二に、私は練習のためにphp7.2バージョンを使用しています

    あなたが私にくれたコードで、私は(新しいデモ)->test()を変更しましたto (new Demo)->test2() 実行中

    両方の出力結果は Peter

    クラスの[通常のメソッド]が​​[クラスの静的プロパティ]と[静的プロパティ]の両方を呼び出すことができることを証明していますか?クラスのメソッド]

    返事
    0
  • 天蓬老师

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

    まず第一に、学習に対する真剣な姿勢に感謝します。おっしゃるとおり、チュートリアルにはいくつか手抜きがあります...

    実際、通常のメソッドでは静的属性を直接呼び出してもエラーは報告されませんが、エラーは報告されます。静的メソッドの呼び出しは絶対に許可されません。

    通常のメソッドでは、静的属性の使用は公式には推奨されていません。これは、将来のバージョンで修正される可能性がある歴史的なバグです。参考までに、以下はテストコードです:

    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
  • キャンセル返事