Допустим, у меня есть следующее 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);
Если сейчас я зациклю все myRecursiveFilterIterator
, используя RecursiveIteratorIterator
:
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
без предоставления дополнительных аргументов.