【发布时间】:2015-09-22 15:12:46
【问题描述】:
我在 PHP 中有一个带有私有数组字段的类,并通过遍历该数组并产生新值来实现 IteratorAggregate。
class Item implements IteratorAggregate{
private static $items = array(
'a' => array(1, 2);
'b' => array(3, 4);
'c' => array(5, 6);
);
public function getIterator() {
return array_walk(Item::$items, function ($value, $key) {
yield array('letter' => $key, 'number' => $value[0]);
});
}
}
然后我尝试将此类的新实例传递给foreach 子句:
foreach((new Item()) as $value){
process($value);
}
但是,这失败得很惨:
致命错误:未捕获的异常“异常”和消息“对象” Item::getIterator() 返回的必须是可遍历的或 实现接口Iterator'
但是,据我了解,我的类是可遍历的,因为它实现了 IteratorAggregate。
关于我做错了什么有什么建议吗?我可以重写它以将产量转换为数组,但这并不能解释为什么我会收到我收到的错误。
【问题讨论】:
标签: php foreach generator yield