Хотя этот вопрос касается DocBlocks в целом, мой вариант использования касается PHP.
Рассмотрим следующий PHP-код:
<?php
class ParentClass {
/**
* Says 'hi' to the world.
* @return ParentClass Returns itself for chaining.
*/
public function say_hi(){
echo 'hi';
return $this;
}
}
class ChildClass extends ParentClass {
/**
* Says 'bye' to the world.
* @return ChildClass Returns itself for chaining.
*/
public function say_bye(){
echo 'bye';
return $this;
}
}
$c = new ChildClass;
$c->say_hi()->say_b| <- type hinting won't suggest "say_bye" here
?>
Это просто тривиальный класс с некоторой цепочкой. Расширенный класс теряет подсказку типа, потому что блок документации родительского класса использует конкретное имя класса, которое не имеет методов/свойств дочернего класса.
Предполагая, что нам нужна возможность подсказки типа (если нет, пожалуйста, оставьте этот вопрос - я не хочу здесь бесполезных аргументов), как мне это исправить?
Я придумал следующие возможности:
- Измените стандарт PHPDoc, чтобы разрешить специальное ключевое слово
- Добавьте лишний метод say_hi(), который вызывает родителя только для повторного объявления docblock
- Вообще не указывайте тип возвращаемого значения, пусть IDE решает, что означает
return $this;
(это вообще работает?)