校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 深入理解php中unset()

深入理解php中unset()

熱門標簽:安裝電銷外呼系統 衡水外呼系統平臺 地圖標注平臺怎么給錢注冊 注冊400電話申請 釘釘打卡地圖標注 福州人工外呼系統哪家強 百度商鋪地圖標注 新河科技智能外呼系統怎么樣 常州地圖標注服務商

概述

unset()經常會被用到,用于銷毀指定的變量,但它有自己的行為模式,如果不仔細的話可能會被中文解釋給迷惑:

先來看看官方文檔的說法:

unset  —— unset a given variable

void unset (mixed $var [,mixed $...]); 

parameters:

var:The variable to be unset.    //要unset的變量

...:Another variable ... //其他需要unset的變量

return Values:No value is returned.    //unset不返回值

Because this is a language construct and not a function,it cannot be called using variable functions.

//unset()是語言結構,不是函數,因此不能被函數變量調用,具體參照函數變量。

使用function_exists('unset')返回的false,以此證明unset并不是一個函數,所以無法使用$fun='unset';$fun()的方式調用unset()

It is possible to unset even object properties visible in current context.

//通用環境下unset可以銷毀對象或者對象的可見屬性(public)

It is not possible to unset $this inside an object method since PHP5

在php5之前unset無法銷毀對象中的$this方法

when using unset() on inaccessible  object properties,the __unset() overloading method will be called,if declare.

當unset()無法銷毀對象中的屬性,例如私有屬性,保護屬性,那么會自動加載對象中的__unset方法。

description:

unset() destroys the specified variables.     //unset()銷毀指定的變量

The behavior of unset() inside of a function can vary dependiing on what type of variable you are attempting to destroy.

//unset()的行為在函數內部可以根據你所指定銷毀的變量類型變化。

變化情況

情況一:

if a globalized variable is unset() inside of a function,only the local variable is destroyed.The variable in the calling environment will retain the same value as before unset() was called.

如果在函數內一個使用global使其全局化的變量,使用unset進行銷毀,那么只有局部的變量會被銷毀,在調用環境的變量將會保留沒有使用unset()銷毀之前的調用的變量值。

the example:

?php
function destroy_foo() 
{
    global $foo;
    unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;
?>

the above example will output:bar

這是官方文檔的例子,可能這樣還是不太明顯,把上面的例子改成下面這樣,一切就很清晰了。

?php 
function des(){
	global $foo;
	$foo='bars';
	unset($foo);
	echo $foo;
}
$foo='bar';
echo "The globalized variable is unset() inside of a function:";
des();
echo "br/>";
echo "The variable in the calling environment:";
echo $foo;

上面的例子會返回如下結果:

可以看到函數內echo $foo會得到錯誤提示該變量沒有定義,因為unset將$foo在函數內的局部變量銷毀了。

而外部調用環境的$foo仍保留著沒有被unset進行銷毀,上面官方描述上寫了調用環境的$foo將保留的是在使用unset()前的變量值,因此echo出bars,而不是bar。

to unset() a global variable inside of a function,then use the $GLOBALS array to do so.

如果要用unset()銷毀函數中的全局變量,應該使用$GLOBALS數組形式

function destroy_foo(){
	unset($GLOBALS['foo']);
}
$foo = 'bar';
destroy_foo();
echo $foo;

the above example whill output: Notice: Undefined variable: foo in ...

延伸:

這里可以明確一點,函數內global修飾的變量$var會使其全局化,但和$GLOBALS['var']性質不同,雖然他們都是使用的外部調用環境的$var,但是函數內global $var里保存的只是外部環境調用變量$val的一個指針或者同名引用,而$GLOBALS['var']是外部調用環境$var本身,因此unset在函數內對兩者進行銷毀會產生上面例子的不同的原因,前者銷毀的只是保存同名引用或者指針的變量$var,后者銷毀的是外部調用變量$var本身。

情況二:

if a variable  that is PASSED BY REFERENCE is unset() inside of a function,only the local variable is destroyed.The variable in the calling environment will retain the same value as before unset() was called.

如果一個被引用的函數在函數內部使用unset()進行銷毀,那么只有函數內部的局部變量被銷毀,而調用環境變量仍然會保留unset()之前被調用的值。

?php 
function foo($bar){
	unset($bar);
	$bar="blah";
}
$bar='something';
echo $bar."\n";
foo($bar);
echo $bar."\n";

The above example will output:something something

這個和上面global其實很相似,函數內部引用的變量$bar其實保存的是外部環境變量$bar的指針或者說外部變量$bar的引用,因此unset在函數內部銷毀的并不是外部環境調用的變量,因此外部環境調用的變量$bar還存在。

情況三:

if a static variable is unset() inside of a function,unset() destroys the variable only in the context of the rest of a function.Following calls will restore the previous value of a variable.

如果是函數內部的靜態變量使用unset(),unset()銷毀掉函數內部的靜態變量,但是下次調用會恢復之前該靜態變量的值。
為了更明顯,下面的例子進行對比,這里對官方的范例進行了修改對比:

?php 
function fun1(){
	static $count=0;
	$count++;
	echo "before:".$count." ";
	$count='2';
	echo "after".$count." ";
}
for($i=0;$i5;$i++){
	fun1();
	echo "br/>";
}

output: 

下面使用unset:

?php 
function fun1(){
	static $count=0;
	$count++;
	echo "before:".$count." ";
	unset($count);
	$count='2';
	echo "after".$count." ";
}
for($i=0;$i5;$i++){
	fun1();
	echo "br/>";
}

output: 

兩個對比可以看出,unset只是將函數內部的靜態變量進行了銷毀,但沒有銷毀儲存在內存里的該靜態變量的值,因為在函數內部用static聲明的靜態變量存儲的僅僅是指向內存存儲該靜態變量的一個指針,因此unset()銷毀的時候也僅僅是銷毀了該指針,但存儲在內存里的靜態變量值沒有受到影響,因此再次調用該函數的時候,static該變量再次建立了與內存中該變量的指針關系,而上一次調用時unset()之前的該變量值依舊存在,因此會恢復該變量上一次的值,因此$count進行了遞增。

以上就是深入理解php中unset()的詳細內容,更多關于php unset()的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • PHP unset函數原理及使用方法解析
  • php中用unset銷毀變量并釋放內存
  • 關于php unset對json_encode的影響詳解
  • php使用unset()刪除數組中某個單元(鍵)的方法
  • PHP魔術方法__ISSET、__UNSET使用實例
  • PHP中isset()和unset()函數的用法小結
  • 解析PHP中的unset究竟會不會釋放內存
  • php unset全局變量運用問題的深入解析
  • php中is_null,empty,isset,unset 的區別詳細介紹
  • PHP中使用unset銷毀變量并內存釋放問題
  • php中session_unset與session_destroy的區別分析
  • PHP中刪除變量時unset()和null的區別分析

標簽:遼陽 六安 鷹潭 唐山 克拉瑪依 白城 柳州 鶴崗

巨人網絡通訊聲明:本文標題《深入理解php中unset()》,本文關鍵詞  深入,理解,php,中,unset,深入,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入理解php中unset()》相關的同類信息!
  • 本頁收集關于深入理解php中unset()的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    五月综合激情婷婷六月色窝| 国产精品一区免费视频| 国产麻豆9l精品三级站| 欧美美女黄视频| 五月综合激情网| 欧美精品99久久久**| 亚洲国产成人av好男人在线观看| 日本大香伊一区二区三区| 亚洲欧美另类在线| 欧美午夜精品理论片a级按摩| 国产精品成人网| 欧美艳星brazzers| 日本不卡一区二区三区高清视频| 91国偷自产一区二区三区成为亚洲经典 | 成人午夜电影网站| 亚洲欧美日韩国产另类专区| 不卡一二三区首页| 一区二区三区在线视频播放 | 99久久免费国产| 亚洲欧美日韩国产综合| 欧美一级午夜免费电影| 激情六月婷婷综合| 国产亚洲欧洲一区高清在线观看| 成人动漫中文字幕| 天堂成人国产精品一区| 国产欧美视频一区二区| eeuss鲁片一区二区三区| 日本aⅴ亚洲精品中文乱码| 久久精品水蜜桃av综合天堂| 波多野结衣视频一区| 亚洲成在人线在线播放| 国产精品亲子伦对白| 777久久久精品| 国产福利一区二区| 蜜臀av一区二区在线观看| 亚洲激情六月丁香| 久久女同互慰一区二区三区| 欧美日韩精品一区视频| 99久久精品免费看| 国产精品资源在线看| 亚洲va韩国va欧美va| 一区二区三区中文字幕电影 | 欧美亚洲综合久久| 91麻豆高清视频| 丰满亚洲少妇av| 国产在线一区二区综合免费视频| 日韩在线卡一卡二| 麻豆精品一区二区综合av| 一区二区三区中文在线观看| 日本一二三四高清不卡| 欧美激情自拍偷拍| 久久久综合九色合综国产精品| 91精品国产综合久久香蕉的特点| 欧美性xxxxx极品少妇| 欧美亚日韩国产aⅴ精品中极品| 国产不卡在线视频| 99精品视频一区二区三区| 色婷婷精品久久二区二区蜜臀av| 暴力调教一区二区三区| 欧洲日韩一区二区三区| 欧美日韩国产另类不卡| 日韩一二三区不卡| 中文字幕巨乱亚洲| 亚洲一线二线三线视频| 久久成人免费网| 成人免费视频app| 欧美网站一区二区| 国产欧美一区在线| 自拍偷拍国产精品| 蜜桃一区二区三区在线观看| 成人免费视频视频| 日本韩国欧美在线| 欧美成人三级电影在线| 亚洲精品日韩综合观看成人91| 日韩av一级片| 色婷婷亚洲婷婷| 久久久久久久久久久久电影| 亚洲精品中文在线观看| 日本中文一区二区三区| 欧亚一区二区三区| 成人欧美一区二区三区黑人麻豆| 亚洲一区在线看| av成人免费在线观看| 26uuu国产日韩综合| 一个色妞综合视频在线观看| 久久成人免费日本黄色| 欧美喷潮久久久xxxxx| 一区二区三区丝袜| 国产精品 欧美精品| 国产日韩欧美不卡| 成人动漫一区二区在线| 欧美一区二区视频在线观看2022| 亚洲手机成人高清视频| 99re热这里只有精品视频| 国产喂奶挤奶一区二区三区| 视频一区视频二区中文字幕| 精品视频一区二区不卡| 午夜精品视频在线观看| 欧美色老头old∨ideo| 一二三四社区欧美黄| 一本色道亚洲精品aⅴ| 日韩毛片视频在线看| 成人毛片老司机大片| 中文一区一区三区高中清不卡| 精东粉嫩av免费一区二区三区| 欧美一级片免费看| 久久99精品国产麻豆婷婷| 欧美本精品男人aⅴ天堂| 蜜臀va亚洲va欧美va天堂| 日韩欧美电影一二三| 国精品**一区二区三区在线蜜桃| 久久免费电影网| 色综合久久久久久久久久久| 亚洲午夜久久久久久久久电影网| 91九色最新地址| 精品一区二区在线视频| 国产蜜臀97一区二区三区| 91丨九色丨黑人外教| 奇米一区二区三区| 中文字幕乱码日本亚洲一区二区| 99re这里只有精品首页| 日本不卡一二三区黄网| 中文字幕欧美国产| 欧美久久久久免费| 99精品欧美一区二区三区综合在线| 一区二区三区精品在线| 国产精品网站在线观看| 欧美一区二区三区不卡| www.成人在线| 韩国精品在线观看| 亚洲综合色在线| 国产精品久久久久永久免费观看| 欧美成人性福生活免费看| 91免费视频观看| 国产不卡高清在线观看视频| 日韩二区三区四区| 综合电影一区二区三区| 亚洲国产精品成人综合色在线婷婷| 欧美日韩一级二级| 欧美美女直播网站| 欧美午夜寂寞影院| 欧美在线看片a免费观看| 成人av在线资源网站| 成人动漫中文字幕| 一本一本大道香蕉久在线精品| 91视视频在线观看入口直接观看www | 亚洲一区二区三区不卡国产欧美| 国产精品乱子久久久久| 亚洲色图.com| 日韩电影一区二区三区| 喷白浆一区二区| 成人综合婷婷国产精品久久蜜臀| 91视频91自| 欧美日本免费一区二区三区| 亚洲精品一区二区三区蜜桃下载| 欧美激情一区二区在线| 国产精品国产自产拍高清av| 自拍偷自拍亚洲精品播放| 天天色 色综合| 成人性生交大片| 欧美美女网站色| 国产精品天干天干在线综合| 一区二区在线观看av| 蜜臂av日日欢夜夜爽一区| 97久久精品人人澡人人爽| 日韩一区二区麻豆国产| 一区二区在线看| 国产成人av网站| 欧美一区二区三区不卡| 亚洲欧美另类久久久精品2019| 日韩电影免费一区| 欧美中文字幕一区| 国产精品国产三级国产三级人妇| 毛片av中文字幕一区二区| 成人18视频在线播放| 精品成人佐山爱一区二区| 一区二区三区四区蜜桃| 韩国一区二区在线观看| 欧美日本免费一区二区三区| 亚洲乱码一区二区三区在线观看| 久久不见久久见免费视频7| 欧美日韩一区三区| 亚洲国产精品精华液网站| 欧美在线综合视频| 亚洲风情在线资源站| 欧美午夜片在线看| 日韩精品色哟哟| 3d动漫精品啪啪一区二区竹菊| 亚洲自拍偷拍欧美| 欧美欧美欧美欧美| 一区二区三国产精华液| 日本久久一区二区| 亚洲免费观看高清完整版在线观看| 懂色av一区二区三区蜜臀| 久久综合99re88久久爱| 国产精品99久久久久久似苏梦涵 | 色诱视频网站一区| 亚洲一二三专区| 久久蜜臀中文字幕| 欧美在线你懂的|