我注意到以下每个示例都会回显__call
。
class A {
public function __construct() {
$this->something();
self::something();
call_user_func(array("self", "something"));
forward_static_call(array("self", "something"));
A::something();
call_user_func(array(__CLASS__, "something"));
forward_static_call(array(__CLASS__, "something"));
}
public function __call($name, $arguments) {
echo __FUNCTION__ . "<br />";
}
public static function __callStatic($name, $arguments) {
echo __FUNCTION__ . "<br />";
}
}
new A();
是否可以从对象上下文中调用__callStatic
方法,即使类中存在__call
魔术方法?
我发现call_user_func(array(__CLASS__, "__callStatic"), array("method"), array());
有些难看。
答案 0 :(得分:2)
__callStatic()
。
但是当您从非静态上下文(在您的代码中,foo::bar()
方法是非静态上下文)__construct
时,非静态调用,,除非该函数明确定义为静态。
因此,如果您真的想在__callStatic()
方法中使用__construct
,则可以直接使用它。
public function __construct() {
self::__callStatic('something', array());
}