装饰类的Phpdoc?

装饰类的Phpdoc?,php,decorator,Php,Decorator,我正在实现一个装饰器模式: class DecorateMe { public function a() { } public function b() { } public function c() { } } class Decorator { /** * @var DecorateMe */ private $beignDecorated; public function __construct(DecorateMe

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

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()

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

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

如果您的IDE支持,您还可以通过使用
@mixin
注释来实现自动化(例如PHPStorm支持)。官方消息,PhpDoc不支持此批注

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

另外,IDE不支持神奇的方法。除了实际执行代码外,IDE无法知道类
装饰程序
中是否存在
a()
b()
,只能尝试解析
\u call()
方法并反向工程它的功能。难道没有“自动”方法吗?让我不要每次更改类中的某些内容时都更新此列表。PHPStorm中有一个
@mixin
-注释提供了此功能。这可以写成
@mixin decorome
很酷,但它似乎不是一个常规的解决方案。它的PhpStorm是特定的,不是吗?非一般PhpDoc规则否-@mixin在PhpDoc中没有正式记录。它取决于您的IDE,是否支持此注释