首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中输入提示__call()魔术方法?

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

Stack Overflow用户
提问于 2019-07-26 01:23:51
回答 1查看 429关注 0票数 0

出于测试目的,我正在实现一个Adapter pattern,我想用两个不同类的方法来输入提示适配器的返回,我该如何实现呢?

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

发布于 2019-07-26 01:23:51

似乎PHP本身不能做到这一点,但是如果您使用的是PHPStorm 2018.3+,那么只要它不在__construct上,您就可以使用联合类型(或交集类型)

代码语言:javascript
复制
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();

有用的链接:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57207265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档