Почему $ _SESSION передается по ссылке в PHP 7?

#php #session #php-7

#php #сессия #php-7

Вопрос:

Я обновляюсь с PHP 5.6 до PHP 7, и возникла странная проблема.

     <?php
    session_start();
    $_SESSION['test'] = true;
    $var = $_SESSION;
    session_unset();
    print_r($var);
  

PHP 5.6
Вывод:

 Array
(
    [test] => 1
)
  

PHP 7
Вывод:

 Array
(
)
  

Я предполагаю, что это происходит потому $_SESSION , что передается по ссылке, но почему?

Комментарии:

1. MCVE: 3v4l.org/Lg0IE

2. измените на: $var = amp;$_SESSION; чтобы получить одинаковое поведение во всех версиях PHP. Я подозреваю, что вы встречали «копировать при записи» с более ранней версией PHP. 3v4l.org/vv9PU

3. Похоже на ошибку, пожалуйста, сообщите о bugs.php.net .

4. обходной путь: $var = array_merge(array(), $_SESSION); . Я протестировал его с обычными массивами, и он работает нормально. т.е. «копировать при записи». Это просто session_unset(); ошибка. ;- Версия/ Array_merge: 3v4l.org/ve303

5. Исправлено вверх по течению, ссылка bugs.php.net/bug.php?id=73273 и github.com/php/php-src/commit /.

Ответ №1:

В заключение, это была ошибка, которая теперь исправлена, начиная с PHP 7.0.13. Подробности в комментариях к вопросу.