如何使自动完成在 foreach php 循环中工作? (vscode, 智能感知)
How to make autocomplete work in foreach php loop? (vscode, intellisense)
我正在使用 vscode 和 php 扩展包(它包含最常用的扩展)。我想在此 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 的解决方案。
是否有扩展来支持代码中任何地方的文档块类型提示?会很好:
/** @var my_class_name */
$my_variable;
据我所知,在php7 中,变量类型的唯一位置是在函数声明中。 PHP IntelliSense 也理解
$obj = new ClassName;
(至少祝福他们......)
经过大量搜索我没有找到一个简单的解决方案,我想出了这个可行的解决方案:
在你的class中创建一个静态函数
/**
* 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
中的注释有效,那会更好,但至少它是一种使用代码完成的方法。
你一直在努力 Eclipse/Zend type annotations:
/* @var $obj my_class_name */
$obj->obj_method();
支持它们的编辑器已经不多了。今天的实际标准似乎是:
/** @var my_class_name $obj */
$obj->obj_method();
我可能是错的,但我相信 PHP IntelliSense does not support either anyway (please try and report back). I can confirm that PHP Intelephense 确实支持后者。
试试这个,对我有用
将其添加到 foreach 的顶部
/** @var post $post */
例如
/** @var post $post */
foreach($res_class as $post)
{
// you can use auto complete in vscode
$post
}
我正在使用 vscode 和 php 扩展包(它包含最常用的扩展)。我想在此 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 的解决方案。
是否有扩展来支持代码中任何地方的文档块类型提示?会很好:
/** @var my_class_name */
$my_variable;
据我所知,在php7 中,变量类型的唯一位置是在函数声明中。 PHP IntelliSense 也理解
$obj = new ClassName;
(至少祝福他们......)
经过大量搜索我没有找到一个简单的解决方案,我想出了这个可行的解决方案:
在你的class中创建一个静态函数
/**
* 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
中的注释有效,那会更好,但至少它是一种使用代码完成的方法。
你一直在努力 Eclipse/Zend type annotations:
/* @var $obj my_class_name */
$obj->obj_method();
支持它们的编辑器已经不多了。今天的实际标准似乎是:
/** @var my_class_name $obj */
$obj->obj_method();
我可能是错的,但我相信 PHP IntelliSense does not support either anyway (please try and report back). I can confirm that PHP Intelephense 确实支持后者。
试试这个,对我有用
将其添加到 foreach 的顶部
/** @var post $post */
例如
/** @var post $post */
foreach($res_class as $post)
{
// you can use auto complete in vscode
$post
}