【问题标题】:How to get intellisense working with phpStorm when passing object to function or iterating将对象传递给函数或迭代时如何让智能感知与 phpStorm 一起工作
【发布时间】:2012-12-13 02:58:31
【问题描述】:

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

我在这里错过了什么?

我是否需要更改代码(转换.. 等),缺少 phpStorm 设置? 也许不可能?

【问题讨论】:

    标签: php function intellisense phpstorm code-hinting


    【解决方案1】:

    虽然来自@hakre 答案的 PPHDoc 块在 PHPStorm 中工作,但正确的形式是类型后跟变量名,如下所示

    /** @var Person $aPerson */
    

    还有那个

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

    这些将在 PHPStorm 和 phpDocumentor 中工作。

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

    【讨论】:

      【解决方案2】:

      对于第一个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
         ...
      }
      

      这也确保您只能传递该类型的值。另见Type Hinting DocsInterfaces Docs

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

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

      一些相关答案:

      【讨论】:

      • 效果很好。谢谢,这让我发疯了!
      • 谢谢 .. 它为我节省了很多时间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多