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