在将对象传递给函数或进行迭代时,如何让intellisense使用phpStorm
我有一个带有getter和setter的对象,但当我将其传递给函数或遍历这些对象的数组时,我会失去该对象的智能感知 例如:在将对象传递给函数或进行迭代时,如何让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
...
$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
...
}
一些相关的回答:
/**@var Person$aPerson*/
那
/**@var Person[]$personArray*/
这些将在PHPStorm和phpDocumentor中工作
资料来源:效果很好。谢谢,这让我发疯了!谢谢这节省了我很多时间。
/**
* @param Person $person
*/
function doSomething($person) {
$person->getAge() // now with code-completition
...
}