Есть ли способ документировать, что у определенного класса есть магические методы для каждого метода, определенного в другом классе?
Я использую PhpStorm, поэтому я был бы доволен любым решением, которое автоматически запустит автозаполнение.
class A { // a bunch of functions go here... } /** * Class B * What should go here to make it work??? */ class B { private $aInstance; public function __construct() { $this->aInstance = new A(); } public function __call($name, $arguments) { // TODO: Implement __call() method. if(method_exists($this->aInstance, $name)) { return $this->aInstance->{$name}(...$arguments); } throw new BadMethodCallException(); } // a bunch more functions go here... }
Правильное решение – использовать поддерживаемые @method
PHPDoc @method
. Таким образом, он будет работать и в других редакторах / IDE, которые поддерживают PHPDoc и понимают такой стандартный тег.
Этот подход требует, чтобы каждый метод указывался отдельно. Подробнее об этом в другом вопросе / ответе StackOverflow: https://stackoverflow.com/a/15634488/783119 .
В текущих версиях PhpStorm вы можете использовать не-в-PHPDoc-спецификации (и, возможно, специфичные для PhpStorm) теги @mixin
.
Добавление @mixing className
в комментарии PHPDoc для вашего целевого класса должно выполнить эту работу за вас.
/** * Class B * * @mixin A */ class B {
В принципе, тег @mixin
делает то, что делают фактические черты PHP.
Обратите внимание, что нет гарантии, что поддержка такого тега не будет удалена в какой-то момент в будущем, хотя это маловероятно.