【发布时间】:2020-07-08 16:19:31
【问题描述】:
有一个Api Client 类指定返回特定类的方法。方法名与被调用的类名相同。
问题:有什么方法可以简化这个吗?我知道魔术方法__call(),但我不明白是否可以通过它实现相同的东西?还是会更糟?
class ApiClient
{
private RequestController $controller;
public function __construct(string $region)
{
$this->controller = new RequestController($region);
}
public function user(): User
{
return new User($this->controller);
}
public function rating(): Rating
{
return new Rating($this->controller);
}
public function weapon(): Weapon
{
return new Weapon($this->controller);
}
public function achievement(): Achievement
{
return new Achievement($this->controller);
}
}
【问题讨论】:
-
魔术
_call解决方案将花费您能够对返回的对象进行类型提示,并失去use语句的编译时优势。这些在运行时不起作用,因此如果您的任何类位于不同的命名空间中,则需要使用字符串操作来处理它。如果这些不适用,那么下面的答案就可以了。