[英]How do I type-hint __call() magic method in PHP?
我正在实现用于测试目的的Adapter模式 ,我想使用两个不同类的方法键入hint来返回Adapter,我该如何实现呢?
class Foo {
public function somethingOnlyFooHave() {};
}
class Adapter {
protected $handler;
public function __construct(object $handler) {
$this->handler = $handler;
}
public function __call($name, ...$args) {
$this->handler->$name($args);
}
public function somethingOnlyTheAdapterHave() {}
}
$foo = new Adapter(new Foo);
// How can I get type-hinting for both the Adapter and Foo?
$foo->somethingOnlyFooHave();
$foo->somethingOnlyTheAdapterHave();
似乎PHP本身无法做到这一点,但是如果您使用的是PHPStorm 2018.3+,则可以使用联合类型(或交集类型),只要它不在__construct
:
class Foo {
public function somethingOnlyFooHave() {}
}
class Adapter {
protected $handler;
public function __construct(object $handler) {
$this->handler = $handler;
}
public function __call($name, ...$args) {
$this->handler->$name($args);
}
/**
* @return Adapter|Foo
*/
public function get() {
return $this;
}
public function somethingOnlyAdapterHave() {}
}
$foo_adapter = ( new Adapter(new Foo) )->get();
// The following methods receives type-hinting:
$foo_adapter->somethingOnlyFooHave();
$foo_adapter->somethingOnlyAdapterHave();
有用的链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.