如何在foreach php循环中使自动完成工作? (vscode,intellisense)

时间:2018-03-30 12:56:47

标签: php visual-studio-code intellisense

我正在使用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;

(祝福他们至少......)

2 个答案:

答案 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确实支持后者。