Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将对象传递给函数或进行迭代时,如何让intellisense使用phpStorm_Php_Function_Intellisense_Phpstorm_Code Hinting - Fatal编程技术网

在将对象传递给函数或进行迭代时,如何让intellisense使用phpStorm

在将对象传递给函数或进行迭代时,如何让intellisense使用phpStorm,php,function,intellisense,phpstorm,code-hinting,Php,Function,Intellisense,Phpstorm,Code Hinting,我有一个带有getter和setter的对象,但当我将其传递给函数或遍历这些对象的数组时,我会失去该对象的智能感知 例如: ... $personA = new Person(..); $age = $personA->getAge(); // intellisense works. $personArray = array($personA, $personB, .. ); foreach($personArray as $aPerson){ $aPerson->getA

我有一个带有getter和setter的对象,但当我将其传递给函数或遍历这些对象的数组时,我会失去该对象的智能感知

例如:

...
$personA = new Person(..);
$age = $personA->getAge();  // intellisense works.

$personArray = array($personA, $personB, .. );
foreach($personArray as $aPerson){
   $aPerson->getAge();   //  no intellisense here
}

doSomething($personA); 



function doSomething($person){
   $person->getAge()         //  no intellisense here
   ...
}
我错过了什么

我是否需要更改代码(casting..等),缺少phpStorm设置?
可能是不可能的?

对于第一个
foreach
案例,它(尚未)是开箱即用的,但是您通常可以提示:

$personArray = array($personA, $personB, .. );
foreach ($personArray as $aPerson) {
   /* @var $aPerson Person */
   $aPerson->getAge();  // now with code-completition
}
这是在进行迭代的变量上进行类型暗示。或者,也可以对数组变量执行类型提示:

/* @var $personArray Person[] */
$personArray = array($personA, $personB, .. );
foreach ($personArray as $aPerson) {
    $aPerson->getAge();  // now with code-completition
}
对于第二种情况,可以添加PHP类型提示(我推荐):

这还确保您只能传递该类型的值。也看到了

第二种情况的另一种解决方案是在函数的docblock中记录参数:

/**
 * @param Person $person
 */
function doSomething($person) {
   $person->getAge() //  now with code-completition
   ...
}

一些相关的回答:


当PPHDoc块从answer在PHPStorm中工作时,正确的形式应该是type后跟变量名,如下所示

/**@var Person$aPerson*/

/**@var Person[]$personArray*/
这些将在PHPStorm和phpDocumentor中工作


资料来源:

效果很好。谢谢,这让我发疯了!谢谢这节省了我很多时间。
/**
 * @param Person $person
 */
function doSomething($person) {
   $person->getAge() //  now with code-completition
   ...
}