额外拼抢(链接)方法调用到__get()魔法方法
我没有寄予厚望,这一个:额外拼抢(链接)方法调用到__get()魔法方法
由于有像$service->foo->bar($a, $b)
的foo
和具有容器类的行动服务$service
作为受保护的财产,有没有办法使用容器上的__get()
访问服务并传递->bar($a, $b)
?
class Container {
protected $service;
protected $responses = [];
public function __get ($name) {
$this->responses[] = $service->$name-> _???_
return $resp;
}
}
可能被拦截使容器能赶上操作,调用$service
有了它,保存响应,然后返回响应
要么某些方式攫取其他任何被链接的$name
或者如果$name
只包括所有这些。我知道这有点复杂,但它会帮助我大幅清理一些代码,再加上我现在普遍好奇。
这个应用程序运行PHP7,如果重要的话。
而且交替,如果有是办法做到这一点,但它不是__get()
,洞察力,将不胜感激
到bar
调用发生__get
返回后。 __get
由引擎调用,因此您无法添加其他参数。但是,您可以在您的容器类上创建其他方法来实现所需的功能。
假设我理解你的问题正确,这将导致这样的事情:
public function executeOnService(string $name, string $method, ...$args) {
return call_user_func_array([$this->service->$name, $method], $args);
}
既然你已经期待您的Container
的消费者代码就知道了很多关于这个服务对象的属性,也许你应该只是考虑返回消费代码想要采取的服务的属性,例如:
public function __get ($name) {
return $service->$name;
}
问题是我想处理容器中的动作,将结果存储在容器中,并*还*返回结果。所以'$ service - > $ name'结尾会有链接方法,但我不认为我有任何方法可以从'__get()'中访问这些方法。 –
这可能是最合理的方法。我所希望的是完全重新创建实际呼叫的语法,只是通过Container重定向。虽然看起来不可能。讨厌鬼。 –