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

问题描述 投票:2回答:2

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

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

php visual-studio-code intellisense
2个回答
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确实支持后者。


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中的注释有效会更好,但至少它是一种使用代码完成的方法。

© www.soinside.com 2019 - 2024. All rights reserved.