我在尝试为以下代码示例获得正确的自动完成功能时遇到了一些问题。我在 Win7 机器上使用 PHPStorm 7。
首先只是一个简单的课程。
/**
* Class myObject
*/
class myObject
{
/**
* some method
*/
public function myMethod()
{
// do something
}
}
这是一个集合类,它可以包含前一个类的多个实例并实现IteratorAggregate
界面。
/**
* Class myCollection
*/
class myCollection implements IteratorAggregate
{
/**
* @var myObject[]
*/
protected $_objects = array();
/**
* @param myObject $object
* @return myCollection
*/
public function add(myObject $object)
{
$this->_objects[] = $object;
return $this;
}
/**
* @return ArrayIterator
*/
public function getIterator()
{
return new ArrayIterator($this->_objects);
}
}
这是代码示例。
$collection = new myCollection;
$collection->add(new myObject);
$collection->add(new myObject);
foreach ($collection as $object) {
$object->myMethod(); // gets no autocompletion
}
正如您可能已经猜到的(并在示例中阅读)myMethod()
调用不会自动完成,并且正在代码分析中列出。我发现的唯一方法是添加评论块$object
,说实话,我觉得这非常烦人。
/** @var $object myObject */
foreach ($collection as $object) {
$object->myMethod(); // gets autocompletion now, but sucks
}
那么,关于如何解决这个问题有什么想法或基础知识吗?
/**
* @return ArrayIterator|myObject[]
*/
public function getIterator()
{
return new ArrayIterator($this->_objects);
}
对于扩展类(上面是基类):
/**
* @method myObject[] getIterator()
*/
class ExtendedClass extends BaseCollection
{
}
or
/**
* @method iterable<myObject> getIterator()
*/
class ExtendedClass extends BaseCollection
{
}
我认为这将是处理此类案件的最佳方式。至少它可以与 PHPStorm 一起使用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)