Интерфейс PHP итераторов Netbeans Intellisense - PullRequest
3 голосов
/ 06 ноября 2010

Я использую 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 - это объект типа Это когда я хочу, чтобы он думал (и на самом деле это так), объект типа Foo.

1 Ответ

2 голосов
/ 29 ноября 2012

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

/* @var $obj Foo */

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

...