我正在使用vscode和php扩展包(它包含大多数使用的扩展)。我想在这个foreach循环中使用intellisense:
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-block类型提示?会非常好的:
/** @var my_class_name */
$my_variable;
据我所知,只有变量类型的位置在php7中的函数声明中。 PHP IntelliSense也理解
$obj = new ClassName;
(祝福他们至少......)
答案 0 :(得分:0)
经过大量搜索,我没有找到一个简单的解决方案,所以我想到了这个可行的解决方案:
在您的课程中创建一个静态函数
/**
* 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
中的注释起作用了会更好,但是至少它是一种完全使用代码完成的方法。
答案 1 :(得分:0)
您尝试的是老Eclipse/Zend type annotations:
/* @var $obj my_class_name */
$obj->obj_method();
不再有支持它们的编辑器。截至目前的实际标准似乎是:
/** @var my_class_name $obj */
$obj->obj_method();
我可能是错的,但是我认为PHP IntelliSense也不支持(请尝试并进行报告)。我可以确认PHP Intelephense确实支持后者。