如何在phpStorm传递对象到函数或迭代时获得智能感知


How to get intellisense working with phpStorm when passing object to function or iterating

我有一个带有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
   ...
}

我在这里错过了什么?

我需要改变代码(cast ..)缺少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类型提示(我推荐):
function doSomething(Person $person) {
   $person->getAge() //  now with code-completition
   ...
}

这也确保了您只能传递该类型的值。参见类型提示Docs接口Docs

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

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

相关答案:

    有没有办法让PhpStorm的自动完成"走得更深"?PHPStorm和magic方法
  • 我如何使我的PHP IDE理解依赖注入容器?

当@hakre answer的PPHDoc块在PHPStorm中工作时,正确的形式将是像这样输入变量名

/** @var Person $aPerson */

/** @var Person[] $personArray */

这些将在PHPStorm和phpDocumentor中工作。

来源:http://www.phpdoc.org/docs/latest/references/phpdoc/tags/var.html