Size: a a a

2020 November 24

KN

Kirill Nesmeyanov in PHP
короче, воркараунд вообще бомбезный:
    /**
    * {@inheritDoc}
    */
   public function rewind(): void
   {
       ((static fn() => yield)())->rewind();
   }
источник

KN

Kirill Nesmeyanov in PHP
В этом случае, если руками дёргать rewind вылетит фатал, а если через foreach прогонять, то всё ок
источник

А

Алексей R in PHP
Kirill Nesmeyanov
Магия, rewind вызывается, но фатал судя по всему подавляется форичем
Нет, не подавляется. Это баг. В пхп8 исправили а в 7 не стали
источник

KN

Kirill Nesmeyanov in PHP
о, ща на 8ке проверю
источник

А

Алексей R in PHP
Попробуй не yield from а несколько yield'ов
источник

KN

Kirill Nesmeyanov in PHP
Алексей R
Нет, не подавляется. Это баг. В пхп8 исправили а в 7 не стали
в 8ке так же
источник

KN

Kirill Nesmeyanov in PHP
Алексей R
Попробуй не yield from а несколько yield'ов
та пофигу, я yield from заюзал для того, что б можно было next дёрнуть первым
источник

А

Алексей R in PHP
Kirill Nesmeyanov
в 8ке так же
Может там новый баг )
источник

KN

Kirill Nesmeyanov in PHP
Алексей R
Может там новый баг )
источник

KN

Kirill Nesmeyanov in PHP
это RC2, если что
источник

KN

Kirill Nesmeyanov in PHP
ну и соответственно если дёрнуть:
$generator = $createGenerator();

foreach ($generator as $i) {
   var_dump($i);
}


то всё ок, никаких ошибок rewind
источник

KN

Kirill Nesmeyanov in PHP
опачки
источник

KN

Kirill Nesmeyanov in PHP
@roxblnfk да, ты прав, в PHP 8 просто поведение поменяли
источник

KN

Kirill Nesmeyanov in PHP
$generator = (fn() => yield)();
$generator->rewind();


Теперь не кидает фатал
источник

KN

Kirill Nesmeyanov in PHP
я просто не туда смотрел
источник

KN

Kirill Nesmeyanov in PHP
а, ну потому что next не дрёнул
источник

KN

Kirill Nesmeyanov in PHP
источник

А

Алексей R in PHP
Вот об этом баг и был https://bugs.php.net/bug.php?id=79927
источник

KN

Kirill Nesmeyanov in PHP
Странный баг. Кажется он в 7.4 только появился, т.к. раньше я 146% видел сообщение: "Cannot rewind a generator that was already run"
источник

KN

Kirill Nesmeyanov in PHP
или мне это приснилось
источник