Note that AppendIterator will segfault when iterating over an empty generator. Do not use AppendIterator in conjunction with generators.
https://3v4l.org/YC68k
https://bugs.php.net/bug.php?id=71436
(PHP 5 >= 5.1.0, PHP 7)
Итератор, который выполняет несколько других итераторов один за другим
Note that AppendIterator will segfault when iterating over an empty generator. Do not use AppendIterator in conjunction with generators.
https://3v4l.org/YC68k
https://bugs.php.net/bug.php?id=71436
Updated code.
I could not find how to edit a note :/
Preventing segfault if empty generator.
<?php
$append_iterator = new \AppendIterator();
$generator = some_generator();
// Only works if first value in generator is not empty
// useful when yielding arrays
foreach ($generator as $value)
{
//If first $value not empty, generator is not empty.
if(!empty($value))
{
$append_iterator->append($generator );
//break out of loop after appending.
break;
}
}
Updated code.
I could not find how to edit a note :/
Preventing segfault if empty generator.
<?php
$append_iterator = new \AppendIterator();
$generator = ReportModel::come_generator();
// Only works if first value in generator is not empty
// useful when yielding arrays
foreach ($append_iterator as $value)
{
//If first $value not empty, generator is not empty.
if(!empty($value))
{
$append_iterator->append($errors);
//break out of loop after appending.
break;
}
}
$append_iterator = new \AppendIterator();
$generator = ReportModel::come_generator();
foreach ($errors as $value)
{
//If first $value not empty, generator is not empty.
if(!empty($value))
{
$append_iterator->append($errors);
//break out of loop after appending.
break;
}
}