国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > PHP > 正文

動(dòng)態(tài)網(wǎng)頁(yè)P(yáng)HP中引用

2024-05-04 21:51:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

之前一個(gè)朋友的帖子提到過(guò)這方面的疑問(wèn),這里簡(jiǎn)單整理一下,希望能讓更多新學(xué)php的朋友得到幫助。

php的引用(就是在變量或者函數(shù)、對(duì)象等前面加上&符號(hào))是個(gè)高級(jí)話題,新手多注意,正確的理解php的引用很重要,對(duì)性能有較大影響,而且理解錯(cuò)誤可能導(dǎo)致程序錯(cuò)誤!

很多人誤解php中的引用跟C當(dāng)中的指針一樣,事實(shí)上并非如此,而且很大差別。C語(yǔ)言中的指針除了在數(shù)組傳遞過(guò)程中不用顯式申明外,其他都需要使用*進(jìn)行定義,而php中對(duì)于地址的指向(類似指針)功能不是由用戶自己來(lái)實(shí)現(xiàn)的,是由Zend核心實(shí)現(xiàn)的,php中引用采用的是“寫時(shí)拷貝”的原理,就是除非發(fā)生寫操作,指向同一個(gè)地址的變量或者對(duì)象是不會(huì)被拷貝的,比如下面的代碼:

以下為引用的內(nèi)容:

$a = array('a','c'...'n');
$b = $a;

如果程序僅執(zhí)行到這里,$b和$b是相同的,但是并沒有像C那樣,$a和$b占用不同的內(nèi)存空間,而是指向了同一塊內(nèi)存,這就是php和c的差別,并不需要寫成$b=&$a才表示$b指向$a的內(nèi)存,zend就已經(jīng)幫你實(shí)現(xiàn)了引用,并且zend會(huì)非常智能的幫你去判斷什么時(shí)候該這樣處理,什么時(shí)候不該這樣處理。

如果在后面繼續(xù)寫如下代碼,增加一個(gè)函數(shù),通過(guò)引用的方式傳遞參數(shù),并打印輸出數(shù)組大小。

以下為引用的內(nèi)容:
function printArray(&$arr) //引用傳遞
{
print(count($arr));
}
printArray($a);

上面的代碼中,我們通過(guò)引用把$a數(shù)組傳入printArray()函數(shù),zend引擎會(huì)認(rèn)為printArray()可能會(huì)導(dǎo)致對(duì)$a的改變,此時(shí)就會(huì)自動(dòng)為$b生產(chǎn)一個(gè)$a的數(shù)據(jù)拷貝,重新申請(qǐng)一塊內(nèi)存進(jìn)行存儲(chǔ)。這就是前面提到的“寫時(shí)拷貝”概念。

如果我們把上面的代碼改成下面這樣:

以下為引用的內(nèi)容:
function printArray($arr) //值傳遞
{
print(count($arr));
}
printArray($a);

上面的代碼直接傳遞$a值到printArray()中,此時(shí)并不存在引用傳遞,所以沒有出現(xiàn)寫時(shí)拷貝。

大家可以測(cè)試一下上面兩行代碼的執(zhí)行效率,比如外面加入一個(gè)循環(huán)1000次,看看運(yùn)行的耗時(shí),結(jié)果會(huì)讓你知道不正確使用引用會(huì)導(dǎo)致性能下降30%以上。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘肃省| 方正县| 涪陵区| 五台县| 义马市| 安西县| 萍乡市| 宁蒗| 台安县| 天柱县| 临西县| 桓台县| 玉山县| 临朐县| 无锡市| 巴里| 克拉玛依市| 桓仁| 拉孜县| 乐安县| 阜宁县| 青铜峡市| 榆中县| 彭阳县| 罗城| 安达市| 扶绥县| 博客| 道真| 清远市| 许昌县| 汝南县| 井冈山市| 应城市| 芮城县| 乃东县| 图们市| 玛曲县| 绥滨县| 辰溪县| 新巴尔虎左旗|