因此,在PHPDoc中,可以在成员变量声明上方指定@var,以提示其类型。然后一个IDE,例如PHPEd,将知道它正在处理的对象类型,并能够为该变量提供代码洞察力。

<?php
  class Test
  {
    /** @var SomeObj */
    private $someObjInstance;
  }
?>

这很好,直到我需要对对象数组做同样的事情,以便在以后迭代这些对象时能够得到适当的提示。

那么,是否有一种方法来声明PHPDoc标签,以指定成员变量是SomeObjs的数组?@var数组是不够的,@var数组(SomeObj)似乎是无效的,例如。


当前回答

<?php foreach($this->models as /** @var Model_Object_WheelModel */ $model): ?>
    <?php
    // Type hinting now works:
    $model->getImage();
    ?>
<?php endforeach; ?>

其他回答

问题是@var只能表示一个类型-不包含复杂的公式。如果你有一个语法的“数组的Foo”,为什么停在那里,不添加一个语法的数组的数组,其中包含2个Foo和3个Bar”?我知道元素列表可能比这更通用,但这是一个滑坡。

就我个人而言,我有时会使用@var Foo[]来表示“Foo的数组”,但IDE不支持。

如果你使用PHPStorm 2021.2+,你也可以使用这个语法(数组形状):

@property array{name: string, content: string}[] $files

or

@var array{name: string, content: string}[] $files

Netbeans提示:

在$users[0]->和$this->的User类数组上实现代码完成。

/**
 * @var User[]
 */
var $users = array();

当你完成$this->…,你还可以在类成员列表中看到数组的类型。

<?php foreach($this->models as /** @var Model_Object_WheelModel */ $model): ?>
    <?php
    // Type hinting now works:
    $model->getImage();
    ?>
<?php endforeach; ?>

在Zend Studio中使用数组[type]。

在Zend Studio中,数组[MyClass]或数组[int]甚至数组[array[MyClass]]都可以很好地工作。