douxu0550 2014-06-11 21:57
浏览 9

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

I have the following code example that works as I expected on PHP 5.5, but in the hosting server I have PHP 5.2.17 and it does not.

If I re run it several times, I get what I was expecting, the array gets bigger with different numbers.

But when I run it on PHP 5.2.17 I get the same number, as the instance of class A is frozen.

Evenmore, If I remove this line $_SESSION['a'] = $a; then it works on PHP 5.2.17, but it is not what I need. Anyone with knowledge of PHP releases could think of a way to manage this. Thanks

<?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条回答 默认 最新

  • doudui1850 2014-06-11 22:27
    关注

    I manage to find a dirty and bizzarre solution. I don't know if it fits other purposes, but at least I could continue with other stuff. Strangely it works if you change the name of the key of the $_SESSION array and add a by reference assignment, $_SESSION['a_aux'] = &$a;. Worked on PHP 5.5 and 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']);
    
    ?>
    
    评论

报告相同问题?