【问题标题】:php - Difference $_SESSION behavior in php 5.2 and 5.5php - php 5.2 和 5.5 中的 $_SESSION 行为差异
【发布时间】:2014-08-02 02:55:15
【问题描述】:

我有以下代码示例,它在 PHP 5.5 上按预期工作,但在托管服务器中我有 PHP 5.2.17,但它没有。

如果我重新运行它几次,我会得到我所期望的,数组会随着不同的数字变大。

但是当我在 PHP 5.2.17 上运行它时,我得到了相同的数字,因为 class A 的实例被冻结了。

此外,如果我删除这一行 $_SESSION['a'] = $a;,那么它可以在 PHP 5.2.17 上运行,但这不是我需要的。任何了解 PHP 版本的人都可以想出一种方法来管理它。谢谢

<?php

class A
{
    public $var = 0;
}

session_start();

if(isset($_SESSION['a_array']))
{

    $a = new A();
    $_SESSION['a'] = $a;
    $a->var = rand();

    array_push($_SESSION['a_array'], $a);

}
else
{

    $a_array = Array();
    $_SESSION['a_array'] = $a_array;

}

var_dump($_SESSION['a_array']);

?>

【问题讨论】:

  • 您是否试图将整个对象放入会话变量中?至少看起来是这样的。
  • 我想是的,我需要从另一个脚本访问对象 $a。所以我需要这个 $_SESSION['a'] = $a;
  • 你不应该那样做。制作另一个 php 并将类放入文件中。一旦你这样做,在你需要访问它的页面中包含文件/类,那么你仍然可以这样做:只要包含另一个页面,$a = new A() 就可以访问该类
  • 在我这样做的实践中,这只是一个自洽的例子,所以你可以剪切和粘贴它并且它可以工作。
  • 这只是强调需要有一个一致的开发和生产环境。你应该考虑运行一个虚拟机或类似的东西,它使用你在生产中使用的相同版本的软件进行开发。它会为你节省很多时间。与 5.2 相比,PHP 5.5 有很多新特性,也有很多变化。

标签: php class session


【解决方案1】:

我设法找到了一个肮脏而奇怪的解决方案。我不知道它是否适合其他目的,但至少我可以继续做其他事情。奇怪的是,如果您更改 $_SESSION 数组的键名并添加引用分配 $_SESSION['a_aux'] = &amp;$a;,它会起作用。使用 PHP 5.5 和 PHP 5.2.17。

<?php

class A
{
    public $var = 0;
}

session_start();

if(isset($_SESSION['a_array']))
{

    $a = new A();
    $a->var = rand();

    array_push($_SESSION['a_array'], $a);

    $_SESSION['a_aux'] = &$a;

}
else
{

    $a_array = Array();
    $_SESSION['a_array'] = $a_array;

}

var_dump($_SESSION['a_array']);

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-30
    • 2012-10-08
    • 2011-09-26
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多