Я реализую шаблон декоратора:
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 doc аннотация.
/**
* @method a()
* @method b()
* @method c();
*/
class Decorator { ... }
https://docs.phpdoc.org/references/phpdoc/tags/method.html
Вы также можете автоматизировать это с помощью @mixin
аннотации, если ваша IDE поддерживает это (т.е. PHPStorm поддерживает). Официально, эта аннотация не поддерживается PhpDoc.
/**
* @mixin DecorateMe
*/
class Decorator { ... }
Других решений пока нет …