【发布时间】:2011-05-05 21:36:35
【问题描述】:
我正在使用 Netbeans 6.9 并编写一个实现 Iterator 接口的 PHP 类。当我迭代对象中的项目时,我希望 IDE 提供 Intellisense。它似乎适用于 Zend 框架,因为我注意到当迭代 Zend_Db_Rowset 时,我会得到 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 类型的对象。
【问题讨论】:
-
我刚试了一下,奇怪的是我在
foreach循环内的/** @var $obj Foo */的常用解决方案似乎也不起作用。 Netbeans (6.9.1) 非常确定 $obj 是It。奇怪。 -
尝试删除 /** 中的第二个 *。
-
+1 我仍然认为这是 Netbeans 中的一个错误。从当前方法中提取类型应该不难。显然,Netbeans 认为我们的 PHP 编码人员只迭代数组
标签: php intellisense netbeans-6.9 type-hinting