我遇到了一個非常奇怪的問題,在會話變量和局部變量。PHP會話變量與局部變量交換?
我想弄清楚如果我不理解有關會話在PHP中的某些事情,或者如果這是我的主機正在使用的PHP版本的問題。
這是一個非常簡單的代碼來演示奇怪的問題:
session_start();
var_dump($kenny);
var_dump($_SESSION['kenny']);
$_SESSION['kenny']='def';
var_dump($kenny);
var_dump($_SESSION['kenny']);
$kenny = 'abc';
var_dump($kenny);
var_dump($_SESSION['kenny']);
我第一次運行的代碼,我得到下面的結果(正如人們所期望的那樣):
NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def"
我再次運行它(當然,沒有關閉瀏覽器),我現在就明白了!
string(3) "def" string(3) "def" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc"
我運行它第3,第4,第5次,等等,我得到這個!
string(3) "abc" string(3) "abc" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc"
它看起來對我來說,會話變量「肯尼」和本地變量$肯尼成爲別名之一,並運行該腳本不止一次後對方。嗯......我真的不認爲這是如何在PHP中使用會話變量和局部變量。如果我在這裏丟失了某些東西,請糾正我。
我的網絡主機運行的是php 5.2.2。當我嘗試在其他主機此完全相同的代碼運行PHP 5.2.1,5.2.14和5.3.1,他們總是給我什麼,我想到:
第1次:
NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def"
其後:
NULL string(3) "def" NULL string(3) "def" string(3) "abc" string(3) "def"
我檢查php.net更改日誌,並沒有發現任何東西,我能理解,可以解決這一問題。但就像我剛纔提到的那樣,早期版本(5.2.1)可以正常工作,所以這讓我非常困惑。
如果有人運行任何其他版本的PHP 5.2.x,請嘗試一下,讓我知道你是否看到相同的問題。或者如果有人對這個問題有所瞭解,我會非常感謝任何反饋。
非常感謝!
是否啓用了註冊全局變量? – erisco 2010-09-23 15:41:28