最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP中static關(guān)鍵字原理的學(xué)習(xí)研究分析

 更新時(shí)間:2011年07月18日 23:20:58   作者:  
PHP中static關(guān)鍵字原理的學(xué)習(xí)研究分析,學(xué)習(xí)php的朋友可以參考下。
看PHP手冊的時(shí)候發(fā)現(xiàn)了下面這樣一段代碼:
復(fù)制代碼 代碼如下:

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

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

<?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;
?>

執(zhí)行結(jié)果如下:
start
  1. Notice: Undefined variable: a 
  2. 10 
  3. 10 
  4. Notice: Undefined variable: a 
  5. 10 
  6. 10 
  7. 100 
  8. 100 
  9. 100 
  10. end
(結(jié)果中關(guān)于文件位置的部分已刪去。也可以去掉echo語句使用zend的debug功能查看,這樣結(jié)果更清晰)

代碼第5行第一次輸出$a的值為4,由此推測PHP在頁面初始化的時(shí)候分配靜態(tài)變量的內(nèi)存,此時(shí)使用了同一個變量的最后一次聲明的值(這個可以把4改為其他數(shù)測試)。代碼第7行調(diào)用unset函數(shù)銷毀變量$a,再次輸出$a的值時(shí)看到未定義變量的提示,說明變量已經(jīng)被銷毀。

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

第11行將$a的值修改為10,在14行再次聲明$a,17行輸出認(rèn)為10。推測為重復(fù)聲明時(shí)php還是使用靜態(tài)變量內(nèi)存中的值,而不再次賦值。

至此,手冊中發(fā)現(xiàn)的問題,大致上已經(jīng)解決了,即遞歸調(diào)用中的聲明沒有改變$count的值,所以遞歸在$count=10時(shí)成功停止。

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

相關(guān)文章

  • PHP轉(zhuǎn)盤抽獎接口實(shí)例

    PHP轉(zhuǎn)盤抽獎接口實(shí)例

    這篇文章主要介紹了PHP轉(zhuǎn)盤抽獎接口的實(shí)現(xiàn)方法,實(shí)例分析了隨機(jī)抽獎接口的實(shí)現(xiàn)原理與對應(yīng)數(shù)據(jù)庫操作的技巧,需要的朋友可以參考下
    2015-02-02
  • PHP根據(jù)文章內(nèi)容生成關(guān)鍵詞自動化Keywords標(biāo)簽

    PHP根據(jù)文章內(nèi)容生成關(guān)鍵詞自動化Keywords標(biāo)簽

    這篇文章主要為大家介紹了PHP根據(jù)文章內(nèi)容生成關(guān)鍵詞實(shí)現(xiàn)自動化Keywords標(biāo)簽實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • ThinkPHP安裝和設(shè)置

    ThinkPHP安裝和設(shè)置

    本文是ThinkPHP的系列教程的第一篇,本系列一共七篇,我們將從簡到難,由淺入深,給大家詳細(xì)介紹這款優(yōu)秀的國產(chǎn)開源php框架,有需要的小伙伴可以關(guān)注下。
    2015-07-07
  • php在數(shù)據(jù)庫抽象層簡單使用PDO的方法

    php在數(shù)據(jù)庫抽象層簡單使用PDO的方法

    這篇文章主要介紹了php在數(shù)據(jù)庫抽象層簡單使用PDO的方法,以PDO針對數(shù)據(jù)庫的連接、插入、查詢等操作為例分析了PDO操作數(shù)據(jù)庫的相關(guān)技巧,需要的朋友可以參考下
    2015-11-11
  • 使用PHPOffice/PHPWord實(shí)現(xiàn)讀取Word內(nèi)容

    使用PHPOffice/PHPWord實(shí)現(xiàn)讀取Word內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何使用PHPOffice/PHPWord實(shí)現(xiàn)讀取Word內(nèi)容的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07
  • 封裝一個PDO數(shù)據(jù)庫操作類代碼

    封裝一個PDO數(shù)據(jù)庫操作類代碼

    數(shù)據(jù)庫PDO操作類,網(wǎng)上好多朋友需要的,可以參考下。
    2009-09-09
  • php操作excel文件 基于phpexcel

    php操作excel文件 基于phpexcel

    最近在工作中需要處理多語言的翻譯問題,翻譯都是寫在excel表格里面。為了處理方便我就保留中文和英文兩列。這樣需要將這些數(shù)據(jù)從excel中取出來,然乎保存在excel的數(shù)組中,通過使用循環(huán)數(shù)組將相應(yīng)的數(shù)據(jù)放入到數(shù)據(jù)庫中。
    2010-07-07
  • 實(shí)現(xiàn)在同一方法中獲取當(dāng)前方法中新賦值的session值解決方法

    實(shí)現(xiàn)在同一方法中獲取當(dāng)前方法中新賦值的session值解決方法

    這篇文章主要介紹了在同一方法中獲取當(dāng)前方法中新賦值的session值解決方法,需要的朋友可以參考下
    2014-06-06
  • php+js實(shí)現(xiàn)裁剪任意形狀圖片

    php+js實(shí)現(xiàn)裁剪任意形狀圖片

    這篇文章主要為大家詳細(xì)介紹了php+js實(shí)現(xiàn)裁剪任意形狀圖片,類似css mask,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • PHP中$GLOBALS[''HTTP_RAW_POST_DATA'']和$_POST的區(qū)別分析

    PHP中$GLOBALS[''HTTP_RAW_POST_DATA'']和$_POST的區(qū)別分析

    這篇文章主要介紹了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的區(qū)別,結(jié)合具體實(shí)例形式分析了$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的功能與使用過程中的區(qū)別,需要的朋友可以參考下
    2017-07-07

最新評論

商南县| 迭部县| 西城区| 西安市| 邛崃市| 新民市| 双牌县| 皮山县| 仪陇县| 苍南县| 永兴县| 青铜峡市| 四会市| 年辖:市辖区| 汉源县| 镇远县| 墨竹工卡县| 拉萨市| 松溪县| 漠河县| 盘锦市| 武安市| 抚宁县| 石狮市| 汉寿县| 尤溪县| 苏尼特右旗| 新安县| 扎鲁特旗| 凤台县| 榆树市| 鄂伦春自治旗| 林西县| 墨竹工卡县| 金昌市| 崇明县| 页游| 南和县| 安溪县| 疏勒县| 沈阳市|