【问题标题】:Phpdoc for decorating class?装饰类的Phpdoc?
【发布时间】:2018-04-01 01:06:01
【问题描述】:

我正在实现一个装饰器模式:

class DecorateMe
{
    public function a() { }
    public function b() { }
    public function c() { }
}

class Decorator
{
    /**
     * @var DecorateMe
     */
    private $beignDecorated;

    public function __construct(DecorateMe $beignDecorated)
    {
        $this->beignDecorated = $beignDecorated;
    }

    public function c() { }

    public function __call($name, $parameters)
    {
        return $this->beignDecorated->$name($parameters);
    }
}

$obj = new Decorator(new DecorateMe());
$obj->a();
$obj->b();
$obj->c();

所有调用都有效,但 IDE 将仅提供 c() 方法。如何使其提供所有a()b()c()

【问题讨论】:

  • AFAIK,IDE 不支持魔法方法。除了实际执行您的代码之外,您的 IDE 无法知道 Decorator 类中是否存在 a()b(),除非尝试解析您的 __call() 方法并对其进行逆向工程.

标签: php decorator


【解决方案1】:

您可以使用类级别的@method php 文档注释。

/**
 * @method a()
 * @method b()
 * @method c();
 */
class Decorator { ... }

https://docs.phpdoc.org/guide/references/phpdoc/tags/method.html

如果您的 IDE 支持此功能(即 PHPStorm 支持),您还可以使用 @mixin 注释自动执行此操作。官方,PhpDoc 不支持这个注解。

/**
 * @mixin DecorateMe
 */
class Decorator { ... }

【讨论】:

  • 没有“自动”方式吗?不要让我每次更改课堂内容时都更新此列表
  • PHPStorm 中有一个 @mixin - 注释提供了这一点。这可以写成@mixin DecorateMe
  • 很酷,但它似乎不是一个常规的解决方案。它特定于 PhpStorm 不是吗?不是一般的 PhpDoc 规则
  • 否 - @mixin 没有在 PhpDoc 中正式记录。这取决于您的 IDE,是否支持此注释
猜你喜欢
  • 2014-01-14
  • 1970-01-01
  • 2018-07-27
  • 2020-01-11
  • 1970-01-01
  • 2017-04-16
  • 2021-07-16
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多