Есть ли какие-либо причины, чтобы моя IDE (фактически PHPStorm) понимала это:
$student->setName('Marco');
setName()
экземпляр Student
, не переопределяя setName()
в подклассе (только для добавления комментариев PHPDoc)?
class Person { private $name; /** * @param string $name * @return Person */ public function setName($name) { $this->name = $name; return $this; } } class Student extends Person { }
Вы можете вернуть $ this вместо человека в своем докблоке
вы должны перезаписать свой тег метода как комментарий, как это
/** * @method Student setName($name) */ class Student extends Person { }
По моему опыту, я нашел полезным использовать комбинированный подход. Моя IDE (IntelliJ IDEA с плагином PHP) жаловалась, что мои быстрые методы возвращали $this
когда это значение позднее использовалось в качестве параметра для вызова другого метода. Изменив комментарий PHPDoc на это:
/** * @param string $name * @return $this|Person */
IDE была более счастливой, и PHPDoc более информативен для пользователя.
Кстати, говоря, что метод возвращает $this
в PHPDoc, это очень хороший признак того, что этот метод реализует свободный интерфейс. Говорить, что он возвращает Person
, хотя и технически точен, необязательно означает беглость. Например, метод, который создает новый объект Person
и возвращает его, также может использовать эту же аннотацию, но он не будет бегло.