С момента выхода php 7 развелось много шума по поводу цикла foreach в php 7.
Что же именно изменилось в foreach? Пострадала ли обратная совместимость?
|
С момента выхода php 7 развелось много шума по поводу цикла foreach в php 7. Что же именно изменилось в foreach? Пострадала ли обратная совместимость? |
|||
|
|
Разработчики описали изменения в foreach в php 7 следующим образом: 1) Итерации внутри foreach не влияют на указатель массива. Напомню, что управление указателем осуществляется семейством функций current(), next(), reset() и т.д. Рассмотрим на примере. Более ранние версии php: $array = [0, 1, 2]; foreach ($array as &$val) { var_dump(current($array)); } exit; // Результат: int(1) int(2) bool(false) В php 7 указатель будет всегда указывать на первый элемент массива (вернёт значение первого элемента): // php 7 $array = [0, 1, 2]; foreach ($array as &$val) { var_dump(current($array)); } exit; // Результат: int(0) int(0) int(0) $array = [2, 1]; foreach ($array as $val) { var_dump(current($array)); } exit; // Результат: int(2) int(2) int(2) Интересно, что в более ранних версиях php, если не использоваться ссылку на элемент в foreach, то функция current внутри foreach всегда возвращает второй элемента массива: $array = [0, 1, 2]; foreach ($array as $val) { var_dump(current($array)); } exit; // Результат: int(1) int(1) int(1)
2) При проходе массива php 7 по значению $array = array('first', 'second', 'third'); foreach ($array as $val) { unset($array[1]); } var_dump($array); //Результат: string(5) "first" string(6) "second" string(5) "third" В более ранних версиях php (php version < 7) было так: $array = array('first', 'second', 'third'); foreach ($array as $val) { unset($array[1]); } var_dump($array); //Результат: string(5) "first" string(5) "third"
3) При проходе массива php 7 по ссылке (будет дополнено) |
||||||||
|
|
не понял. $array = array('first', 'second', 'third'); foreach ($array as $val) { var_dump($val); unset($array[1]); } //Результат: string(5) "first" string(5) "third"
$array = array('first', 'second', 'third'); foreach ($array as $val) { var_dump($val); unset($array[1]); } //Результат: string(5) "first" string(6) "second" string(5) "third"
|
||||
|