[英]PHP global variable loses value during web request
我有一個帶有靜態函數的實用程序類,該函數利用全局變量:
private static function isRateLimited($ip) {
global $memcached_node;
$memcache = new Memcache;
$memcache->connect($memcached_node['host'], $memcached_node['port']) or die ("memcache failure");
// do stuff
}
全局變量是通過廚師食譜設置的。 在最近的更改之前,應用程序中的所有功能一直運行良好。 更改調整了代碼執行,以便在單個Web請求期間兩次調用isRateLimited()
。
調試顯示,第一次isRateLimited()
,設置了全局變量,並且一切正常。 但是,第二次isRateLimited()
,全局變量返回一個空值(與empty()
進行測試)。 結果是與memcached的第二個連接失敗。
全局不會在代碼的任何其他位置被覆蓋或設置。 為什么在同一Web請求中執行函數之間,全局變量會丟失其值?
作為參考,我嘗試使用$memcached_node = $GLOBALS["memcached_node"];
來引用全局$memcached_node = $GLOBALS["memcached_node"];
作為我的“最后一次努力”飛鏢之一。 行為是相同的。
發生了類似的問題,在靜態函數調用全局變量存在之前,靜態函數內部為空。 全局關鍵字上的內容已為空。 但是我是通過引導程序為PHPunit加載代碼的。 如果沒有PHPunit,它會按預期工作。
我最終要做的是將變量明確分配為超級全局變量:
$GLOBALS['foo'] = $foo;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.