Для ясности, использование $ this должно указывать только на объект класса current , верно?
PhpDocumentor в настоящее время (v1.4.3) не распознает $ this как определенное ключевое слово, которое должно соответствовать типу данных самого класса.
Только типы данных, известные в PHP, и классы, уже проанализированные PhpDocumentor, являются правильными значениями типов данных для использования с тегом @return. В PhpDocumtentor есть запрос функции, чтобы помочь в документировании беглых методов, которые всегда «возвращают $ this». [1]
В случае тега @var я не понимаю, как было бы возможно, чтобы переменная класса содержала свой собственный экземпляр класса. Поэтому я не могу понять, что должен сказать «@var $ this».
Если, однако, ваше намерение с $ this составляет , а не для беглых методов, которые "возвращают $ this", и должно было быть просто ярлыком для PhpDocumentor и / или вашей IDE чтобы волшебным образом угадать, какие типы данных вы имеете в виду, используя $ this , я должен был бы предположить, что нет никакого способа сделать это. Самое близкое предложение, которое я мог бы сделать, это использовать имя родительского класса, который является общим родителем для всех различных дочерних классов, которые этот конкретный var / return может иметь во время выполнения, а затем использовать часть описания тега, чтобы иметь встроенный Теги {@link}, перечисляющие возможные дочерние классы.
Пример: у меня есть абстрактный класс Parent с дочерними объектами Child1, Child2 и Child3, каждый из которых может встречаться в моем классе Foo времени выполнения.
Итак, Foo :: _ var может быть любым из этих типов дочерних классов во время выполнения, но как бы я это задокументировал?
/**
* @var Parent this could be any child of {@link Parent}, {@link Child1}, {@link Child2}, or {@link Child3}...
*/
protected $_var;
Возвращаясь к проблеме «return $ this», я задокументировал бы вещи аналогичным образом:
/**
* a fluent method (i.e. it returns this class's instance object)
* @return Parent this could be any child of {@link Parent}, {@link Child1}, {@link Child2}, or {@link Child3}...
*/
public function foo() {
return $this;
}
Документирование таким образом, по крайней мере, позволяет вашему классному документу иметь ссылки на определенные классы. Чего он не может сделать, так это выделить беглый . Однако, если ваша IDE способна распознавать имена классов, возможно, она сможет выполнить необходимую логическую связь с этими другими классами. Я думаю, что Eclipse может сделать это, по крайней мере, с помощью всплывающей подсказки, если вы наведете указатель мыши на имя класса в описании тега. Я не думаю, что Eclipse может использовать это, чтобы затем сделать методы различных дочерних классов доступными в завершении кода. Он будет знать о родительских методах для завершения кода, потому что тип данных, который я явно перечисляю, является Parent, но это настолько далеко, насколько это возможно в IDE.
[1] - http://pear.php.net/bugs/bug.php?id=16223