gpt4 book ai didi

php - 可迭代对象的正确 phpdoc 注释?

转载 作者:可可西里 更新时间:2023-10-31 23:40:44 27 4
gpt4 key购买 nike

我在尝试为以下代码示例获取正确的自动完成时遇到了一些问题。我在 Win7 机器上使用 PHPStorm 7。

首先只是一个简单的类。

/**
* Class myObject
*/
class myObject
{
/**
* some method
*/
public function myMethod()
{
// do something
}
}

这个是集合类,它可以包含先前类的多个实例并实现了IteratorAggregate 接口(interface)。

/**
* 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 添加注释 block ,老实说,我发现这非常烦人。

/** @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
{
}

/**
* @method iterable<myObject> getIterator()
*/
class ExtendedClass extends BaseCollection
{
}

我认为这是处理这种情况的最佳方式。至少它适用于 PHPStorm

关于php - 可迭代对象的正确 phpdoc 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com