2010-11-06 2 views
3

Я использую 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.

+0

Я просто попробовал, и любопытно, что мое обычное решение '/ ** @var $ obj Foo * /' внутри цикла foreach не работает. Netbeans (6.9.1) очень задан в своем представлении, что $ obj - это 'It'. Странный. – Fanis

+2

Попробуйте удалить второй * в/**. –

+0

+1 Я все еще считаю, что это ошибка в Netbeans. Это не должно быть трудно извлечь тип из текущего метода. Очевидно, Netbeans считает, что PHP-кодеры только перебирают массивы – ArjanW

ответ

2

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

/* @var $obj Foo */ 

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