我是 VS Code 的新手,所以我不知道这里发生了什么。 我有一个全新的 Intelephense 安装,并禁用了基本的 PHP 建议,但是当我键入一个数组(其中包含对象)时,在键入 -> 运算符后,对象属性和函数不会显示在建议中。
有办法让它发挥作用吗?
示例:
class newClass {
public $property1;
public $property2;
public function NewFunction {
return 'Something';
}
}
$array = array();
for($i = 0; $i < 2; $i++ {
$temp = new newClass;
$temp -> property2 = 'SomeData';
$array[$i] = $temp;
$array[$i] -> property1 = 'Random';
unset($temp);
}
编辑:这就是我读取充满对象的数组的方式。问题是,当我输入 $array[$i] -> property1 = 'Random' 行时,它没有给出建议。
当我输入最后一行时,在输入 -> 运算符后,我希望 Intelephense 列出类 newClass 的所有属性和函数。但事实并非如此。
另外,我使用普通数组,因为根据官方手册,objectArray 不支持 foreach。因此,对我来说,毫无用处。
提前致谢。 :)
最佳答案
来自PHP documentation on arrays :
The key [of an array] can either be an int or a string. The value can be of any type.
例如,我们可以:
$obj1 = new MyClass;
$my_array[0] = $obj1;
但是,由于存储在数组中的值可以是任何类型,因此没有什么可以阻止我们做这样的事情:
$my_array[1] = "hello";
$my_array[2] = 5;
这使得编辑器很难推断 $my_array[0]
包含 MyClass
类型的对象(指向)。
但是,由于您已经有 $obj1
指向这样的实例,因此在您输入 $obj1->
后,编辑器应该能够给出非常好的建议>。然后,由于 $obj1
和 $my_array[0]
指向同一对象,因此通过 $obj1
进行的任何编辑> 会影响 $my_array[0]
指向的对象。
只有 PHP Intelephense 处于事件状态时,VS Code 会给出以下建议:
所以:
<?php
class MyClass
{
public $property1;
public $property2;
}
$obj1 = new MyClass;
$my_array[0] = $obj1;
$obj1->property1 = "Random";
$obj1->property2 = "Another";
echo $my_array[0]->property1 . "<br>" . $my_array[0]->property2;
将为我们提供这些设置,即使它们是通过(指针)$obj1
设置并通过(指针)$my_array[0]
显示。
话虽如此,我们可以使用DocBlock类型提示来让编辑器知道我们的意图。例如,如果我们有:
/** @var MyClass[] */
$my_array[0] = $obj1;
那么编辑器也可以提供有关数组的有用建议:
有关详细信息,请参阅this phpDocumentor page on DocBlocks .
关于php - VS Code PHP Intelephense 数组中的对象未向 -> 运算符显示属性和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67445446/