亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php中引用&的真正理解-變量引用、函數引用、對象引用

2019-11-06 06:04:34
字體:
來源:轉載
供稿:網友

 php的引用(就是在變量或者函數、對象等前面加上&符號) //最重要就是 刪除引用的變量 ,只是引用的變量訪問不了,但是內容并沒有銷毀 在PHP 中引用的意思是:不同的名字訪問同一個變量內容.

變量的引用        PHP 的引用允許你用兩個變量來指向同一個內容 

<?php$a="ABC"; $b =&$a; echo $a;//這里輸出:ABC echo $b;//這里輸出:ABC $b="EFG"; echo $a;//這里$a的值變為EFG 所以輸出EFG echo $b;//這里輸出EFG ?>  函數的傳址調用 傳址調用我就不多說了 下面直接給出代碼

<?phpfunction test(&$a){     $a=$a+100; } $b=1; echo $b;//輸出1 test($b);   //這里$b傳遞給函數的其實是$b的變量內容所處的內存地址,通過在函數里改變$a的值 就可以改變$b的值了 echo "<br>"; echo $b;//輸出101?> 要注意的是,在這里test(1);的話就會出錯,原因是:PHP規定傳遞的引用不能為常量(可以看錯誤提示)。

函數的引用返回 先看代碼

<?phpfunction &test(){     static $b=0;//申明一個靜態變量     $b=$b+1;     echo $b;     return $b; }}$a=test();//這條語句會輸出 $b的值 為1 $a=5; $a=test();//這條語句會輸出 $b的值 為2$a=&test();//這條語句會輸出 $b的值 為3 $a=5; $a=test();//這條語句會輸出 $b的值 為6?>

下面解釋下:  通過這種方式$a=test();得到的其實不是函數的引用返回,這跟普通的函數調用沒有區別 至于原因: 這是PHP的規定 PHP規定通過$a=&test(); 方式得到的才是函數的引用返回 至于什么是引用返回呢(PHP手冊上說:引用返回用在當想用函數找到引用應該被綁定在哪一個變量上面時。) 這句狗屁話 害我半天沒看懂

       用上面的例子來解釋就是 $a=test()方式調用函數,只是將函數的值賦給$a而已, 而$a做任何改變,都不會影響到函數中的$b,而通過$a=&test()方式調用函數呢, 他的作用是 將return $b中的 $b變量的內存地址與$a變量的內存地址 指向了同一個地方 即產生了相當于這樣的效果($a=&b;) 所以改變$a的值 也同時改變了$b的值 所以在執行了 $a=&test(); $a=5; 以后,$b的值變為了5

這里是為了讓大家理解函數的引用返回才使用靜態變量的,其實函數的引用返回多用在對象中

<?phpclass a{    var $abc="ABC";} $b=new a; $c=$b; echo $b->abc;//這里輸出ABC echo $c->abc;//這里輸出ABC $b->abc="DEF"; echo $c->abc;//這里輸出DEF?>

以上代碼是在PHP5中的運行效果 在PHP5中 對象的復制是通過引用來實現的。上列中$b=new a; $c=$b; 其實等效于$b=new a; $c=&$b; PHP5中默認就是通過引用來調用對象, 但有時你可能想建立一個對象的副本,并希望原來的對象的改變不影響到副本 . 為了這樣的目的,PHP定義了一個特殊的方法,稱為__clone.

引用的作用        如果程序比較大,引用同一個對象的變量比較多,并且希望用完該對象后手工清除它,個人建議用 "&" 方式,然后用$var=null的方式清除. 其它時候還是用php5的默認方式吧. 另外, php5中對于大數組的傳遞,建議用 "&" 方式, 畢竟節省內存空間使用。

取消引用 當你 unset 一個引用,只是斷開了變量名和變量內容之間的綁定。這并不意味著變量內容被銷毀了。例如:

<?php $a = 1; $b =& $a; unset ($a); ?>

不會 unset $b,只是 $a。 function quoteTest(){ global $var ; //相當于 $var = &$GLOBALS['var']; unset($var); //刪除只是刪除引用,而引用的內容還存在,同上這并不意味著變量內容被銷毀了}$var=1;quoteTest();echo $var; //  結果 1

----------------------------------------------------------------------------------------------

不會 unset $b,只是 $a。

function quoteTest(){ global $var ; //相當于 $var = &$GLOBALS['var']; $var = 5; //因為他們都指向 同一內存內容}$var=1;quoteTest();echo $var; //結果 5----------------------------------------------------------------------------------------------

'&' 這就是引用

 

global 引用 當用 global $var 聲明一個變量時實際上建立了一個到全局變量的引用。也就是說和這樣做是相同的:

<?php $var =& $GLOBALS["var"]; ?>

這意味著,例如,unset $var 不會 unset 全局變量。

$this 在一個對象的方法中,$this 永遠是調用它的對象的引用。

//下面再來個小插曲 php中對于地址的指向(類似指針)功能不是由用戶自己來實現的,是由Zend核心實現的,php中引用采用的是“寫時拷貝”的原理,就是除非發生寫操作,指向同一個地址的變量或者對象是不會被拷貝的。

通俗的講 1:如果有下面的代碼 [php] $a="ABC"; $b=$a; [/php] 其實此時 $a與$b都是指向同一內存地址 而并不是$a與$b占用不同的內存

2:如果在上面的代碼基礎上再加上如下代碼 [php] $a="EFG"; [/php] 由于$a與$b所指向的內存的數據要重新寫一次了,此時Zend核心會自動判斷 自動為$b生產一個$a的數據拷貝,重新申請一塊內存進行存儲

這個也是自己學習的一個過程.

本文


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩在线一区| 性欧美激情精品| 国产久一一精品| 欧美精品18videosex性欧美| 国产精品人人做人人爽| 蜜月aⅴ免费一区二区三区| 国产精品aaa| www.日韩免费| 亚洲精品在线视频| 91禁国产网站| 日韩久久精品成人| 国产视频观看一区| 尤物yw午夜国产精品视频明星| 国产精品九九久久久久久久| 欧美日韩国产123| 久久久久成人网| 国产精品久久久久久一区二区| 国产日韩中文字幕在线| 91精品国产综合久久香蕉最新版| 久久久久久一区二区三区| 精品人伦一区二区三区蜜桃免费| 日韩中文字幕在线| 日韩电影免费在线观看中文字幕| 欧美疯狂xxxx大交乱88av| 久久99青青精品免费观看| 亚洲欧美日韩区| 亚州av一区二区| 欧美日韩福利在线观看| 亚洲天堂av在线免费观看| 91av在线免费观看视频| 国产精品稀缺呦系列在线| 国产亚洲欧美一区| 中文字幕av一区二区三区谷原希美| 欧美在线视频在线播放完整版免费观看| 亚洲精品98久久久久久中文字幕| 亚洲国产精品久久精品怡红院| 色婷婷av一区二区三区在线观看| 国产精品久久久久久av福利| 精品久久国产精品| 欧美在线免费看| 欧美日韩福利电影| 国产精品久久久久aaaa九色| 亚洲精品乱码久久久久久按摩观| 欧美成人三级视频网站| 亚洲欧美另类在线观看| 久久亚洲春色中文字幕| 在线观看亚洲区| 亚洲一区二区三区乱码aⅴ| 国产香蕉一区二区三区在线视频| 亚洲最新av网址| 亚洲国产精久久久久久| 中文字幕亚洲无线码a| 亚洲网址你懂得| 欧美国产一区二区三区| 成人欧美一区二区三区在线| 久久精品免费电影| 97视频在线观看免费| 日本在线精品视频| 欧美体内谢she精2性欧美| 欧美一二三视频| www国产精品视频| 日韩成人中文字幕| 欧美中文字幕在线观看| 欧洲成人在线观看| 国产噜噜噜噜久久久久久久久| 亚洲在线www| 欧美裸体xxxx极品少妇| 免费91麻豆精品国产自产在线观看| 国产精品久久久久久久久借妻| 欧美体内谢she精2性欧美| 国产精品成人va在线观看| 欧美最猛性xxxx| 久久精品亚洲国产| 韩剧1988免费观看全集| 精品视频偷偷看在线观看| 国产亚洲aⅴaaaaaa毛片| 91爱爱小视频k| 欧美日韩中文字幕在线视频| 欧美日韩在线视频首页| 中文字幕日韩电影| 日韩欧美国产中文字幕| 日韩精品高清视频| 欧美激情在线观看| 中文字幕免费国产精品| 久久精品国产一区二区电影| 亚洲精品一区中文| 国产精品一区二区在线| 国产精品高潮呻吟久久av无限| 日韩av影视在线| 色综合天天综合网国产成人网| 国产欧美精品xxxx另类| 九九久久久久久久久激情| 91久久嫩草影院一区二区| 欧洲午夜精品久久久| 78m国产成人精品视频| 欧美亚洲国产成人精品| 高清欧美一区二区三区| 亚洲男人的天堂在线| 美女国内精品自产拍在线播放| 欧美日韩在线视频一区二区| 国产欧美韩国高清| 久久精品亚洲94久久精品| 欧美视频在线观看免费网址| 91人人爽人人爽人人精88v| 日韩美女在线观看| 日韩欧美成人精品| 92裸体在线视频网站| 91精品久久久久久久久不口人| 亚洲国产精品悠悠久久琪琪| 97在线观看免费高清| 欧美国产极速在线| 成人中文字幕+乱码+中文字幕| 国产日产欧美精品| 欧美成人免费播放| 亚洲精品之草原avav久久| 欧美性在线观看| 国语对白做受69| 国产精品色午夜在线观看| 国产成人精品av在线| 色婷婷综合久久久久中文字幕1| 精品国产成人av| 美女黄色丝袜一区| 3344国产精品免费看| 欧美专区中文字幕| 九九九久久国产免费| 日韩av在线精品| 久久久久国产精品www| 97精品国产aⅴ7777| 久久成人精品一区二区三区| 51视频国产精品一区二区| 欧美专区在线播放| 久久男人资源视频| 亚洲综合色激情五月| 国产精品网红福利| 91九色单男在线观看| 亚洲精品中文字幕有码专区| 色妞欧美日韩在线| 最新91在线视频| 亚洲免费伊人电影在线观看av| 亚洲黄色片网站| 欧美综合激情网| 国产日韩欧美一二三区| 欧美日韩在线视频一区| 日韩精品在线观看一区二区| 欧美精品亚州精品| 亚洲在线视频福利| 中文字幕一区电影| 成人午夜激情网| 欧美成人免费大片| 久久久人成影片一区二区三区| 自拍偷拍亚洲在线| 欧美性videos高清精品| 亚洲精品美女网站| 91av中文字幕| 日韩在线资源网| 亚洲aa在线观看| 秋霞午夜一区二区| 亚洲精品国精品久久99热一| 欧美性生交大片免费| 国产日产久久高清欧美一区| 亚洲欧美国产高清va在线播| 亚洲有声小说3d| 91久久国产精品91久久性色| 亚洲一区二区免费|