【发布时间】:2012-02-08 16:47:31
【问题描述】:
假设我有关注ArrayObject:
$array_object = new ArrayObject(array(
array('1', '2', '3', '4'),
array('3', '6', '7', '8'),
array('9', '3', '11', '12'),
));
我扩展 RecursiveFilterIterator 以仅接受值等于参数中传递的某个值的子元素:
class myRecursiveFilterIterator extends RecursiveFilterIterator
{
public $value;
public function __construct($it, $value)
{
parent::__construct($it);
$this->value = $value;
}
public function accept()
{
return (parent::hasChildren()) || (parent::current() == $this->value);
}
}
我创建了这个全新迭代器的一个实例,以过滤等于 3 的值:
$recursive_filter_iterator = new myRecursiveFilterIterator(new RecursiveArrayIterator($array_object), 3);
如果现在我使用RecursiveIteratorIterator 循环整个myRecursiveFilterIterator:
foreach (new RecursiveIteratorIterator($recursive_filter_iterator) as $value) {
var_dump($value);
}
我收到以下警告:
Warning: Missing argument 2 for myRecursiveFilterIterator::__construct() in /my/path/test.php on line myLine Notice: Undefined variable: value in /my/path/test.php on line myOtherLine
所以就像循环 RecursiveIteratorIterator 试图实例化 myRecursiveFilterIterator 而不传递第二个参数 $value。
如果我在不提供额外参数的情况下扩展 FilterIterator,则不会发生这种情况。
【问题讨论】: