Интерфейс PHP итераторов Netbeans Intellisense

Я использую Netbeans 6.9 и пишу класс PHP, который реализует интерфейс Iterator. Я хотел бы, чтобы IDE предлагал Intellisense, поскольку я перебираю элементы в моем объекте. Кажется, это работает для Zend Framework, так как я заметил, что при переборе Zend_Db_Rowset я получаю intellisense для Zend_DB_Row. Например, когда я пишу:

foreach($rowset as $row) {
  $row->delete();
}

Когда я набираю "$row->", Netbeans выскакивает подсказки кода для функций-членов Zend_Db_Row_Abstract. К сожалению, я не могу заставить это работать для моего собственного кода. Ниже приведен пример, который я пытался заставить работать:

class Foo {

    private $value;

    /**
     *
     * @param string $value
     */
    public function setValue($value) {
        $this->value = $value;
    }

    /**
     *
     * @return string
     */
    public function getValue() {
        return $this->value;
    }

}

class It implements Iterator {

    private $data;

    public function __construct($data) {
        $this->data = $data;
    }

    /**
     *
     * @return Foo
     */
    public function current() {
        return current($this->data);
    }

    /**
     *
     * @return Foo
     */
    public function key() {
        return key($this->data);
    }

    /**
     *
     * @return Foo
     */
    public function next() {
        return next($this->data);
    }

    /**
     *
     * @return Foo
     */
    public function rewind() {
        return reset($this->data);
    }

    /**
     *
     * @return bool
     */
    public function valid() {
        return key($this->data) !== null;
    }

}

$a = new Foo();
$b = new Foo();
$a->setValue('Hello');
$b->setValue('Bye');
$testData = array($a, $b);
$myIt = new It($testData);
foreach ($myIt as $obj) {
    echo $obj->getValue();
}

Странно, что intellisense кажется, что $obj - это объект типа It, когда я хочу, чтобы он думал (и на самом деле это) объект типа Foo.

1 ответ

В теле цикла вы можете указать подсказку типа в комментарии.

/* @var $obj Foo */

+1 за предложение Брайана Фишера.

Другие вопросы по тегам