各位前輩好,我是新學習php的,以前是用c++的,所以對于php中變量的生命周期總是很困惑,通過多種學習渠道大致弄懂了臨時變量的作用域和生命周期,但是對于全局變量還是很疑惑,都說php是一請求一進程的,于是我寫了如下兩段代碼進行測試:in.php?文件:$innumber?=?10;echo?"全局變量?innumber?=?".$GLOBALS['innumber']."<br?/>";$_SESSION['innumber']?=?$innumber;echo?"超全局變量?innumber?=?".$_SESSION['innumber']."<br?/>";echo?"本進程PID?=?".getmypid()."<br?/>";include?'inB.php';inB.php?文件:echo?"全局變量?innumber?=?".$GLOBALS['innumber']."<br?/>";echo?"超全局變量?innumber?=?".$_SESSION['innumber']."<br?/>";echo?"本進程PID?=?".getmypid()."<br?/>";先執行?in.php,輸出:全局變量?innumber?=?10超全局變量?innumber?=?10本進程PID?=?9224全局變量?innumber?=?10超全局變量?innumber?=?10本進程PID?=?9224再執行?inB.php,輸出:Notice:?Undefined?index:?innumber?in?...全局變量?innumber?=?Notice:?Undefined?variable:?_SESSION?in?...超全局變量?innumber?=?本進程PID?=?9224我不是很懂為什么執行?inB.php?時,全局變量$GLOBALS['innumber']和超全局變量$_SESSION['innumber']就不存在了呢?假如是一請求一進程,可是我兩次執行得到的pid都是一樣的,我到系統里看了一下,這個是apache的httpd.exe進程,說明進程是一直存在沒有退出過的,于是就更不懂為啥第二次執行inB.php時全局變量就沒了?這樣子的話,是不是就完全沒辦法實現:調用A接口時,往后臺內存存個數據,等調用B接口時,直接使用內存里的這個數據了?是不是就得由前端來負責這個數據的傳遞了,就是:調用A接口請求時,帶這個數據作為參數;等調用B接口時,還要帶上這個數據。至于這個數據怎么在前端的A頁面和B頁面之間傳遞,就是前端操心的事情了。是這樣嗎?感謝您的指點!
1 回答
已采納

wldraa
TA貢獻33條經驗 獲得超17個贊
php的全局變量的生命周期是在一個請求里。
httpd這個進程是一個后臺進程,負責在有請求的時候新開一個線程(進程?)去處理他。新開的那個線程的生命周期就是全局變量的周期。
要實現一個接口里往內存寫數據,另一個接口讀,可以選擇使用 session或者redis(或memcache),如果性能要求不是特別高一般使用數據庫
- 1 回答
- 0 關注
- 1758 瀏覽
添加回答
舉報
0/150
提交
取消