我正在尋找靜態(tài)變數(shù)不儲(chǔ)存在 PHP 請(qǐng)求之間的保證。以下是之前的問題:
跨多個(gè) .php 頁面的 PHP 靜態(tài)變數(shù)
php 中的靜態(tài)變數(shù)是否在請(qǐng)求中持續(xù)存在?
跨會(huì)話的靜態(tài)變數(shù)
明確地說它們不是,但它們更多的是提供一種維護(hù)狀態(tài)的方法,而不是對(duì)預(yù)期行為的具體討論。
舉個(gè)例子,如果我的 PHP 程式碼如下:
function myfunc() { static $a=0; print $a++; } for ($i=0;$i<10;$i++) myfunc();
然後每次運(yùn)行它時(shí)我都會(huì)得到 0123456789 的輸出。我對(duì) PHP 的直覺/理解使我相當(dāng)確定情況一定是如此。
在我自己的實(shí)驗(yàn)中,我將一個(gè)(預(yù)分叉)apache 關(guān)閉到一個(gè)子進(jìn)程,以確保在請(qǐng)求之間不會(huì)記住該變數(shù)。正如我所期望的那樣,它不會(huì)在請(qǐng)求之間被記住。但這只是 PHP 運(yùn)行的場(chǎng)景。
我正在尋找的是:
指向官方文件的鏈接,該文件表示這是預(yù)期行為並且不會(huì)更改。 PHP 文件的相關(guān)部分並沒有明確提及這一點(diǎn)(註釋中除外)。
或者,當(dāng)跨請(qǐng)求(例如網(wǎng)頁伺服器或效能增強(qiáng) PHP 框架)記住靜態(tài)變數(shù)時(shí),它可能不會(huì)清除靜態(tài)變數(shù)以提高請(qǐng)求之間的速度。
PHP 不保留請(qǐng)求之間的應(yīng)用程式狀態(tài)。在 PHP 應(yīng)用程式生命週期中,應(yīng)用程式會(huì)根據(jù)每個(gè)請(qǐng)求重新執(zhí)行。靜態(tài)變數(shù)旨在執(zhí)行離開作用域時(shí)在局部函數(shù)作用域中保留變數(shù)的值。文件中沒有任何地方提到靜態(tài)變數(shù)旨在跨請(qǐng)求保留值。