2014-06-11 43 views
2

我有以下的代碼示例,如我所期望的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

您是否試圖將整個對象放入會話變量?這至少是它的樣子。 – Bioto

+0

我想我是這樣做的,我需要從另一個腳本訪問對象$ a。所以我需要這個$ _SESSION ['a'] = $ a; –

+0

你不應該那樣做。做另一個PHP,並把類放入文件。一旦你在頁面中包含文件/類,你需要訪問它,那麼你仍然可以這樣做:$ a = new A()只要包含其他頁面就可以訪問該類 – Bioto

回答

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']); 

?>