最近我遇到了以下问题。这是一个发生问题的简单示例。
class a{
public function __invoke($classname){
return new $classname($this);
}
}
class b{
private $obj;
public function __construct($obj){
$this->obj = $obj;
}
public function getC(){
return $this->obj('c');
}
}
class c{}
$a = new a;
$a('b')->getC();
当我执行此代码时,出现以下错误
致命错误:调用未定义的方法 b::obj()
似乎 __invoke 的行为在这一行的对象引用上丢失了
return $this->obj('c');
它实际上对我来说不是什么大问题,因为我也可以这样做
return $this->obj->__invoke('c');
..但我真的很想知道为什么 __invoke 在这里不能按预期工作。谁能给我解释一下?提前致谢!