SO question从非静态方法触发 __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 回答