【发布时间】:2016-10-09 11:43:43
【问题描述】:
我正在从 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 是通过引用传递的,但为什么呢?
【问题讨论】:
-
MCVE: 3v4l.org/Lg0IE
-
更改为:
$var = &$_SESSION;以在所有 PHP 版本中获得相同的行为。我怀疑你在早期的 PHP 版本中遇到了“写时复制”。 3v4l.org/vv9PU -
看起来像一个错误,请在 bugs.php.net 上报告。
-
解决方法:
$var = array_merge(array(), $_SESSION);。我已经用普通数组对其进行了测试,它工作正常。即“写时复制”。只是session_unset();有问题。 ;-/ Array_merge 版本:3v4l.org/ve303