繁体   English   中英

如何在PHP中键入提示__call()魔术方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM