2

重複の可能性:
PHP の静的プロパティの Magic __get getter

次のような静的パラメータへの呼び出しをキャッチすることは可能ですか:

class foo
{
    public static $foo = 1;
    //public static $bar = 2; 

    public function catch_bar_call()
    {
        print "Calling an undefined property";
    }
}


print foo::$foo //1
print foo::$bar //error

エラーを取得する代わりに、メソッドを呼び出す必要があります。私は __get() マジックメソッドを通じてその可能性を知っていますが、静的パラメーターでは不可能なため、クラスをインスタンス化する必要があります。

4

1 に答える 1

0

PHPドキュメントから

$name 引数は、操作されるプロパティの名前です。__set ()メソッドの $value 引数は、$name のプロパティに設定する値を指定します。

プロパティのオーバーロードは、オブジェクト コンテキストでのみ機能します。これらのマジック メソッドは、静的コンテキストではトリガーされません。したがって、これらのメソッドは static と宣言しないでください。PHP 5.3.0 以降、魔法のオーバーロード メソッドの 1 つが static と宣言されている場合、警告が発行されます。

あなたにできると思うことは

class Test {
    private static $foo = 1;
    // public static $bar = 2;
    public static function foo() {
        return self::$foo;
    }

    public static  function __callStatic($n,$arg) {
         print "\nCalling an undefined property $n";
    }
}
echo "<pre>";
print Test::foo(); // 1
print Test::bar(); // Calling an undefined property bar

出力

1
Calling an undefined property bar
于 2013-01-07T15:30:57.400 に答える