装饰类的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,是否支持此注释