Я использую Netbeans 6.9 и пишу PHP-класс, который реализует интерфейс Iterator. Я хотел бы, чтобы IDE предлагала Intellisense, когда я перебираю элементы в моем объекте. Кажется, это работает для Zend Framework, поскольку я заметил, что при повторении через Zend_Db_Rowset я получаю intellisense для Zend_DB_Row. Например, когда я пишу:Netbeans Intellisense Интерфейс итератора PHP
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.
Я просто попробовал, и любопытно, что мое обычное решение '/ ** @var $ obj Foo * /' внутри цикла foreach не работает. Netbeans (6.9.1) очень задан в своем представлении, что $ obj - это 'It'. Странный. – Fanis
Попробуйте удалить второй * в/**. –
+1 Я все еще считаю, что это ошибка в Netbeans. Это не должно быть трудно извлечь тип из текущего метода. Очевидно, Netbeans считает, что PHP-кодеры только перебирают массивы – ArjanW