国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP中static關鍵字原理的學習研究分析

2024-05-04 23:17:37
字體:
來源:轉載
供稿:網友
看PHP手冊的時候發現了下面這樣一段代碼:

復制代碼 代碼如下:


<?php
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test();
}
$count--;
}
?>


執行結果如下:
這是一個遞歸的函數,聲明的靜態變量count記錄次數,輸出1~10。
我在看的時候有個疑惑,遞歸調用的時候 static $count = 0; 語句會重復執行,這為什么不會導致count變量被重復賦值呢?帶著這個疑問和同事研究了一下,測試用代碼如下:

復制代碼 代碼如下:


<?php
echo 'start<br />';
static $a = 10;
echo "$a <br />";
unset($GLOBALS['a']);
echo "$a <br />";
static $a = 20;
echo "$a <br />";
$GLOBALS['a'] = 10;
echo "$a <br />";
static $a = 30;
echo "$a <br />";
unset($GLOBALS['a']);
echo "$a <br />";
static $a;
echo "$a <br />";
static $a = 40;
echo "$a <br />";
$a = 100;
echo "$a <br />";
static $a = 50;
echo "$a <br />";
static $a = 4;
echo "$a <br />";
echo 'end <br />';
exit;
?>


執行結果如下:
start

  • Notice: Undefined variable: a 
  • 10 
  • 10 
  • Notice: Undefined variable: a 
  • 10 
  • 10 
  • 100 
  • 100 
  • 100 
  • end
  • (結果中關于文件位置的部分已刪去。也可以去掉echo語句使用zend的debug功能查看,這樣結果更清晰)



    第10行再次輸出時,輸出結果仍是4而不是20,有兩種可能,一個是php再次初始化了$a的值,另一種是php使用了$a被銷毀前的值,這個問題在第20行輸出的時候解決。第16行$a銷毀的時候值為10,第19行聲明后輸出仍為10。


    第11行將$a的值修改為10,在14行再次聲明$a,17行輸出認為10。推測為重復聲明時php還是使用靜態變量內存中的值,而不再次賦值。


    至此,手冊中發現的問題,大致上已經解決了,即遞歸調用中的聲明沒有改變$count的值,所以遞歸在$count=10時成功停止。


    可能有理解不正確的地方,歡迎拍磚。

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 新巴尔虎右旗| 芷江| 尼玛县| 静海县| 淮阳县| 绥德县| 米脂县| 广东省| 中山市| 邓州市| 罗平县| 兴隆县| 芦山县| 富裕县| 神农架林区| 阆中市| 海南省| 碌曲县| 汾阳市| 博客| 东至县| 宜君县| 延吉市| 岳阳市| 阳山县| 临夏市| 栖霞市| 康乐县| 昌宁县| 侯马市| 翼城县| 拜泉县| 永吉县| 轮台县| 中方县| 毕节市| 遵化市| 土默特左旗| 水城县| 岳阳市| 神池县|