1

SO質問非静的メソッドから__callStatic()をトリガーする奇妙な動作は、クラス自体から呼び出されない__callStaticの奇妙な動作を説明するので素晴らしいです(5.3.3ではこの動作は見られませんが5.3では見られないことに注意してください) .8および5.3.12)。__callStaticは、クラスの外部からのみ呼び出すことができるようです。それは今や事実です。しかし、クラス内から__callStaticを本当に呼び出したい場合は、どうすればよいですか?問題を解決するには、どの構文を使用する必要がありますか?

4

2 に答える 2

3

オブジェクトコンテキストからではなく、クラスの外部からのものである必要はありません(つまり$this、クラスのインスタンスはどこにありますか)。したがって、この呼び出しを静的メソッドでラップできます。次に例を示します。

class TestCallStatic
{
    public function __call($func, $args)
    {
        echo "__call($func)";
    }

    public static function __callStatic($func, $args)
    {
        echo "__callStatic($func)";
    }

    public function test()
    {
        self::_test();
    }
    protected static function _test()
    {
        self::i_am_static();
    }
}

$test = new TestCallStatic();
$test->test();

出力:

__callStatic(i_am_static)

于 2013-01-22T21:25:44.637 に答える
0

機能をClass::magicCall($ method、$ args)のような別のメソッドに抽象化し、それを__callStatic()内から呼び出すことができます。そうすれば、Class :: magicCall()を直接呼び出すだけでその機能にアクセスすることもできます。

于 2013-01-22T21:12:18.687 に答える