Что такое синтаксис phpdoc, чтобы связать $ this с определенным классом в Aptana? - PullRequest
2 голосов
/ 25 февраля 2010

Я работаю над шаблонами Magento, но эта проблема касается любой системы загрузки шаблонов.

Поскольку эти шаблоны загружаются механизмом шаблонов, у IDE (в данном случае Aptana) нет возможности узнать, что это за тип $.

Потенциально возможно, что несколько объектов в качестве одного шаблона могут быть загружены несколькими объектами, но, игнорируя это, какой будет правильный синтаксис phpdoc для указания определенного класса для объекта $ this?

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Вы можете определить это так:

/* @var $this type */

где тип - это имя класса

0 голосов
/ 11 декабря 2013

Я обнаружил, что определение типа с помощью @var для $ это не работает - предположительно потому, что $ this является специальным и обрабатывается как таковое Aptana. Мне кажется, что мне нужен плакат, похожий на постер - именно в файлах шаблонов (в моем случае они просто расположены и включены функциями в классе данных) я хочу установить тип для $ this. Как говорит @ashnazg, указывать тип для $ this в определении класса не нужно, поскольку типом $ this всегда является тип класса (вплоть до наследования).

Однако существует обходной путь для файлов шаблонов. В верхней части файла шаблона просто поместите что-то вроде

/**
 * @var My_Data_Model_Type
 */
$dataModel = &$this;

Тогда просто используйте $dataModel (или как вы его называете - может быть, что-то более короткое) вместо $this в шаблоне

0 голосов
/ 26 февраля 2010

Для ясности, использование $ 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

...