php - php 5.2和5.5中的差异$ _SESSION行为

时间:2014-06-11 21:57:34

标签: php class session

我有以下代码示例,就像我在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']);

?>

1 个答案:

答案 0 :(得分:0)

我设法找到一个肮脏和bizzarre解决方案。我不知道它是否适合其他目的,但至少我可以继续其他的东西。奇怪的是,如果您更改$ _SESSION数组的键的名称并添加引用分配$_SESSION['a_aux'] = &$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']);

?>