php-PHP5.2和5.5中的差异$\会话行为

php-PHP5.2和5.5中的差异$\会话行为,php,class,session,Php,Class,Session,我有下面的代码示例,它在PHP5.5上可以正常工作,但在托管服务器上我有PHP5.2.17,但它没有 如果我重新运行几次,就会得到我所期望的结果,数组会随着数字的不同而变大 但是当我在PHP5.2.17上运行它时,我得到了相同的数字,因为class A的实例被冻结了 甚至,如果我删除这行$\u SESSION['a']=$a然后它在PHP5.2.17上工作,但这不是我需要的。任何了解PHP版本的人都可以想出一种方法来管理它。谢谢 <?php class A { public $v

我有下面的代码示例,它在PHP5.5上可以正常工作,但在托管服务器上我有PHP5.2.17,但它没有

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

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

甚至,如果我删除这行
$\u SESSION['a']=$a然后它在PHP5.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']);

?>

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

?>


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