PHP中語(yǔ)言中有些函數(shù)對(duì)于初學(xué)者來(lái)說(shuō)在字面上是很難理解的,需要在實(shí)際編碼中總結(jié)經(jīng)驗(yàn) " /> 黄色免费网,亚洲欧美一区二区三区在线,日韩精品成人

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

php unset全局變量運(yùn)用問(wèn)題的深入解析

php unset全局變量在實(shí)際使用中只能銷毀局部變量,并不能實(shí)現(xiàn)全局變量的目的。下面我們就來(lái)具體解決這一問(wèn)題。希望對(duì)大家有所幫助。

php中語(yǔ)言中有些函數(shù)對(duì)于初學(xué)者來(lái)說(shuō)在字面上是很難理解的,需要在實(shí)際編碼中總結(jié)經(jīng)驗(yàn),來(lái)掌握這些知識(shí)。我們今天要為大家介紹的是php unset全局變量在使用中遇到的一些問(wèn)題。

php 中有個(gè)釋放變量的語(yǔ)句叫做unset(從php4開始unset已經(jīng)不再是一個(gè)函數(shù)了,而是一個(gè)語(yǔ)句),前幾天用unset的時(shí)候出了點(diǎn)問(wèn)題,于是把 unset問(wèn)題總結(jié)如下。如果您仔細(xì)閱讀過(guò)php的手冊(cè),那么就沒必要再看這篇文章了,這篇文章是寫給看手冊(cè)不用心的同學(xué)的。

首先要強(qiáng)調(diào)的一點(diǎn)是php unset全局變量在php中已經(jīng)不再是一個(gè)函數(shù)了,既然不是函數(shù),那么就沒有了返回值,所以用的時(shí)候不能夠用unset的返回值來(lái)做判斷。

其次,在函數(shù)中,php unset全局變量只能銷毀局部變量,并不能銷毀全局變量,來(lái)看下手冊(cè)的一個(gè)例子
復(fù)制代碼 代碼如下:
 < ?php
 function destroy_foo() {
 global $foo;
 unset($foo);
 }
 $foo = ‘bar';
 destroy_foo();
 echo $foo;
 ?>

返回的結(jié)果為
bar
為什么會(huì)這樣呢?原因就是php unset全局變量在函數(shù)中只能銷毀局部變量。如果在程序中需要用到銷毀全局變量的應(yīng)該如何做呢?也很簡(jiǎn)單,用$GLOBALS數(shù)組來(lái)實(shí)現(xiàn)。看下面的例子:
復(fù)制代碼 代碼如下:
 < ?php
 function foo() {
 unset($GLOBALS['bar']);
 }
 $bar = “something”;
 foo();
 var_dump($bar);
 ?>

php unset()函數(shù)被我們用來(lái)銷毀變量,但是往往在實(shí)際操作時(shí)不能使內(nèi)存中的數(shù)據(jù)進(jìn)行釋放。我們?cè)谖恼轮兄v為大家具體講解有關(guān)問(wèn)題的解決辦法。

我們?cè)趯W(xué)習(xí)php語(yǔ)言的時(shí)候,通常都會(huì)各個(gè)函數(shù)的用法比較模糊,很那去一一的掌握。但是我們又必須要掌握這些函數(shù)。下面我們就為大家詳細(xì)介紹有關(guān)php unset()函數(shù)的相關(guān)使用方法。

php unset()函數(shù)是用來(lái)銷毀變量的,但很多時(shí)候,這個(gè)函數(shù)只把變量給銷毀了,內(nèi)存中存放的該變量的值仍然沒有銷毀,也就是沒能達(dá)到我們想要的釋放內(nèi)存的效果。這里我建議大家用 $變量=null 的方法來(lái)釋放其內(nèi)存。原因看了下面的就知道了。

以下是關(guān)于php unset()函數(shù)的幾點(diǎn)要點(diǎn):(以下均在windows環(huán)境下測(cè)試,php 2.5.9)
該函數(shù)只有在變量值所占空間超過(guò)256字節(jié)長(zhǎng)的時(shí)候才會(huì)釋放內(nèi)存
只有當(dāng)指向該值的所有變量(比如有引用變量指向該值)都被銷毀后,地址才會(huì)被釋放(也要執(zhí)行1的判斷)
下面給出例子代碼論證:
復(fù)制代碼 代碼如下:
 < ?php
 $test=str_repeat("1",256); //重復(fù)一個(gè)字符串,返回值為重復(fù)后組成的字符串
 $s = memory_get_usage(); 
 //該函數(shù)用來(lái)查看當(dāng)前所用內(nèi)存
 unset($test);
 $e = memory_get_usage();
 echo ' 釋放內(nèi)存: '.($s-$e); 
 //輸出為272,但如果上面test變量改為$test=str_repeat("1",255),輸出則為0 ,變量值不足256不會(huì)釋放內(nèi)存的
 ?>

至于為什么是272而不是256,就不是很清楚了,不知道內(nèi)部是怎么處理的。
復(fù)制代碼 代碼如下:
 < ?php
 $test = str_repeat("1",256);
 $p = &$test;
 unset($test);
 echo $p; 
 //輸出為256個(gè)1。如果上面改為unset($p),更不行了,echo $test 直接顯示為256個(gè)1
 ?>

也就是說(shuō)內(nèi)存中賦給$a的值仍然存在。可見unset()并沒達(dá)到釋放內(nèi)存的效果。
但如果在上述代碼中加入$test=null,或者再加一個(gè)unset($p),就能達(dá)到釋放內(nèi)存效果了,php unset()函數(shù)測(cè)試代碼如下:
變量賦值為null方法:
復(fù)制代碼 代碼如下:
 < ?php
 $test = str_repeat("1",256);
 $p = &$test;
 $s = memory_get_usage(); 
 $test = null;
 unset($test); //試一下將該句與$test=null 調(diào)換先后順序,則結(jié)果將不相同
 $e = memory_get_usage();
 echo ' 釋放內(nèi)存: '.($s-$e);
 //輸出為272
 var_dump($p); //輸出為NULL
 ?>

將指向該地址中值的變量全部銷毀的方法:
復(fù)制代碼 代碼如下:
 < ?php
 $test = str_repeat("1",256);
 $p = &$test;
 $s = memory_get_usage(); 
 //注意,以下2個(gè)unset()順序?qū)φ{(diào)沒有關(guān)系,不影響結(jié)果
 unset($p);
 unset($test); 
 $e = memory_get_usage();
 echo ' 釋放內(nèi)存: '.($s-$e); //輸出為272
 ?>

到此php unset()函數(shù)論證完畢。

php技術(shù)php unset全局變量運(yùn)用問(wèn)題的深入解析,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 91在线看视频 | 中文字幕1区2区 | 五月天综合影院 | 99这里只有精品 | 午夜精品久久久久久久久久久久久 | 日本精品视频一区二区 | 成人欧美一区二区三区 | 国产情侣激情 | 亚洲区一区二 | 日韩一区二区av | 91精品国产综合久久精品 | 国产男人的天堂 | 精品亚洲一区二区三区 | 精品视频免费在线 | 国产精品一区二区在线 | 亚洲欧美一区二区三区1000 | 综合精品久久久 | 亚洲午夜精品视频 | 成人久久久 | 国产电影一区二区三区爱妃记 | 欧美在线视频一区二区 | 午夜激情免费视频 | 国产精品视频免费看 | a级黄色片在线观看 | 日韩免费在线观看视频 | 日韩av在线免费 | 亚洲欧美精品国产一级在线 | 一本色道精品久久一区二区三区 | 日韩欧美中文字幕在线观看 | 国产色婷婷久久99精品91 | 免费毛片在线 | 亚洲精品1区 | 日韩欧美国产一区二区 | 在线一区二区三区 | 日韩一区二区三区av | 黄色毛片一级 | 紧缚调教一区二区三区视频 | 天堂一区二区三区 | 麻豆av片| 久久不射网 | 欧美日韩成人网 |