以两个类的以下示例为例:
class Yolo {
public function __invoke() {
echo 'YOLO';
}
}
class Swag {
public $yolo;
public function __construct() {
$this->yolo = new Yolo();
}
}是否可以通过Yolo实例调用Swag对象?(new Swag())->yolo();抛出警告而不调用__invoke
PHP警告:未定义错误:调用未定义方法Swag::yolo()
发布于 2017-12-15 23:50:26
在PHP 7中,您可以直接调用它(只需要额外的大括号):
((new Swag())->yolo)();在PHP 5中,需要一个临时变量:
$y=(new Swag())->yolo;
$y();发布于 2017-12-15 23:48:44
问题是,您试图在Swag类上调用函数yolo()。在您的情况下,您必须使用公共类变量并对其调用子类。
var_dump((new Swag())->yolo);那是你的目标。当您使用()时,您尝试调用类,而不是类变量。
发布于 2017-12-15 23:51:58
你甚至不需要让它成为一种公开的方法。但是,由于可调用方法是在运行时创建的,因此可能必须手动重路由调用:
class Yolo {
public function __invoke() {
echo 'YOLO';
}
}
class Swag {
private $yolo;
public function __construct() {
$this->yolo = new Yolo();
}
function __call($method, $args) {
if(is_callable($this->$method))
{
return call_user_func_array($this->$method, $args);
}
}
}
(new Swag())->yolo();首先检查被调用的方法是否存在以及它是否实际可调用,这可能是个好主意。
但是这个例子可以作为概念的证明。
https://stackoverflow.com/questions/47841141
复制相似问题