【问题标题】:Why is $_SESSION passed by reference in PHP 7?为什么 $_SESSION 在 PHP 7 中通过引用传递?
【发布时间】: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 是通过引用传递的,但为什么呢?

【问题讨论】:

  • 更改为:$var = &amp;$_SESSION; 以在所有 PHP 版本中获得相同的行为。我怀疑你在早期的 PHP 版本中遇到了“写时复制”。 3v4l.org/vv9PU
  • 看起来像一个错误,请在 bugs.php.net 上报告。
  • 解决方法:$var = array_merge(array(), $_SESSION);。我已经用普通数组对其进行了测试,它工作正常。即“写时复制”。只是session_unset(); 有问题。 ;-/ Array_merge 版本:3v4l.org/ve303

标签: php session php-7


【解决方案1】:

总而言之,这是一个从PHP 7.0.13 开始修复的错误。问题的 cmets 中的详细信息。

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2016-12-09
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多