我有一个类,我试图创建一个函数来调用一个通过魔术方法运行的静态方法。事情是函数工作,只要它们来自不同类型的类而不是调用它们的类,但是如果我调用同一个类的静态函数,则返回的所有函数都是1.
class Test {
public function static __callStatic($name, $params) {
return 2;
}
public function __call($name, $params) {
return 1;
}
public function Test1() {
return Test::GetTwo();
}
}
class Test2 {
public function Test() {
return Test::GetTwo();
}
}
$t = new Test();
echo $t->Test1(); //prints 1 should be 2
$t2 = new Test2();
echo $t->Test(); //prints 2 as it should
即使静态方法GetTwo()返回一个对象,如果我在与Test1()相同的范围内调用一个函数,我仍然得到1。还有其他人碰到这个吗?
答案 0 :(得分:1)
echo Test::Test1();
您不需要(也不应该使用)实例来调用静态方法。使用类和范围解析运算符(::)来进行调用。
如果您需要late static binding,请使用static::Test1();
对于实例上的方法调用,PHP将尝试以下操作:
在你的情况下,它会在第2步找到__call并继续使用。