foreach внутри while на PHP 7.4

Rootdiv

Новичок
Всем доброго времени суток. После перехода с PHP 7.2 на PHP 7.4 перестал работать foreach внутри while и не знаю как решить эту проблему. Код с проблемой https://github.com/Rootdiv/homework35/blob/master/api/v1/get/list/index.php. На короткие теги обращать не нужно, они не являются причиной проблем. Проблема проявляется возвращением пустого результата после foreach.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба

Похоже, что PDORow больше не итерируем. Видимо, нечто подобное этому https://bugs.php.net/bug.php?id=79041

Самое простое - перестать использовать PDO::FETCH_LAZY, это все равно вечно сломанная штука. Заодно костыль с проверкой ключа на queryString не понадобится.

Можешь зарепортить на bugs.php.net, мне лень и пофиг.
 
Последнее редактирование:

Rootdiv

Новичок
Самое простое - перестать использовать PDO::FETCH_LAZY, это все равно вечно сломанная штука. Заодно костыль с проверкой ключа на queryString не понадобится.
А что тогда использовать? Если использовать PDO::FETCH_OBJ, то всё равно в итоге получается пустой массив.

Online PHP editor | output for jdWmh
К тому же по этой ссылке не используется while и поэтому всё будет работать. Проблема именно при использовании foreach внутри while.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Твой while к этому не имеет никакого отношения. Проблема в том, что в строке 21 $item->getLine() делает PDO::FETCH_LAZY, который возвращает PdoRow, который, в свою очередь, сломан с 7.4, что по моей ссылке наглядно демонстрируется.

Использовать FETCH_OBJ надо вот тут https://github.com/Rootdiv/homework35/blob/master/system/classes/Unit.php#L21

Блин, я в твоем коде разобрался за 5 минут тыкаясь на гитхабе, а ты можешь и под отладчиком запустить и все посмотреть за 30 секунд, алле. Научись пользоваться xdebug.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
стоит открыть репорт на bugs.php.net, это регрессия
 
Сверху