Я использую vscode и пакет расширений php (он содержит в основном используемые расширения). Я хотел бы использовать intellisense в этом цикле foreach:
foreach ($list_of_objs as $obj) {
/* @var $obj my_class_name */
// I want to go to definition of obj_method()
// with F12 but it's not working
// also auto-complete is not working
$obj->obj_method();
}
Пожалуйста, дайте совет, если вы можете решить эту проблему. Я нашел решение для Zend Studio, но не для vscode.
Есть ли в коде расширение для поддержки подсказок типа doc-блока? Было бы очень приятно
/** @var my_class_name */
$my_variable;
Насколько я знаю, только место для типов переменных находится в объявлении функции в php7. PHP IntelliSense также понимает
$obj = new ClassName;
(благослови их хотя бы на это …)
Вы пытались старый добрый Eclipse / Zend аннотации типа:
/* @var $obj my_class_name */
$obj->obj_method();
Не так много редакторов, которые их поддерживают. Стандарт де-факто на сегодняшний день выглядит следующим образом:
/** @var my_class_name $obj */
$obj->obj_method();
Я могу ошибаться, но я верю, что PHP IntelliSense в любом случае не поддерживает (пожалуйста, попробуйте и сообщите). Я могу подтвердить, что PHP Intelephense поддерживает последнее.
Поскольку после долгих поисков я не нашел простого решения для этого, я придумал это рабочее решение:
В вашем классе создайте статическую функцию
/**
* Returns the instance itself for Code completion
* @return ClassName
*/
public static function self($instance) {
return $instance;
}
С этим у вас может быть экземпляр с типом как это:
foreach ($list_of_objs as $obj) {
$obj = ClassName::self($obj);
$obj->obj_method()
}
Было бы лучше, если аннотация в foreach
работал, но по крайней мере это способ использовать завершение кода вообще.