国产探花免费观看_亚洲丰满少妇自慰呻吟_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時成功停止。


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

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 江北区| 白玉县| 枞阳县| 简阳市| 竹北市| 安阳市| 梅河口市| 姜堰市| 依兰县| 高陵县| 东城区| 昭苏县| 两当县| 昆明市| 清远市| 荥阳市| 梁山县| 宜丰县| 南木林县| 大埔县| 桐庐县| 孝义市| 宜黄县| 翁源县| 托里县| 和田县| 合作市| 平利县| 三都| 西藏| 蓝田县| 清远市| 南充市| 隆安县| 侯马市| 沅江市| 朝阳区| 五峰| 辽阳市| 阿拉善左旗| 衡水市|