自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探討PHP引用&符號(hào)的一些注意問(wèn)題

開(kāi)發(fā) 后端
許多人在實(shí)際使用PHP編寫(xiě)代碼的時(shí)候,經(jīng)常會(huì)因?yàn)閷?duì)其理解錯(cuò)誤而造成整段代碼的錯(cuò)誤。其實(shí)PHP引用&符號(hào)與C中的指針并不一樣。

PHP引用&符號(hào)是一個(gè)比較難掌握的知識(shí)點(diǎn)。新手們?cè)趯?shí)際編寫(xiě)代碼時(shí)一定要多注意這一點(diǎn),因?yàn)槿绻銓?duì)PHP引用&符號(hào)的使用理解錯(cuò)誤,將會(huì)導(dǎo)致你所編寫(xiě)的整個(gè)代碼出現(xiàn)錯(cuò)誤。

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

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

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

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

  1. function printArray(&$arr) //引用傳遞  
  2.     {  
  3.         print(count($arr));  
  4.     }  
  5.  
  6.      printArray($a); 

上面的代碼中,我們通過(guò)PHP引用&符號(hào)把$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ǔ)。這就是前面提到的“寫(xiě)時(shí)拷貝”概念。

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

  1. function printArray($arr)  //值傳遞  
  2.     {  
  3.         print(count($arr));  
  4.     }  
  5.  
  6.      printArray($a); 


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

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

責(zé)任編輯:曹凱 來(lái)源: CSDN
相關(guān)推薦

2009-03-13 09:31:03

.NET整合分布式應(yīng)用

2009-12-03 20:21:21

PHP文件上傳

2022-01-12 08:30:55

結(jié)構(gòu)體指針STM32

2009-11-23 13:44:33

PHP5面向?qū)ο?/a>

2012-04-25 22:45:46

2017-02-20 16:28:30

DCISDN-WAN傳輸網(wǎng)絡(luò)

2017-09-10 17:31:18

iOS渲染數(shù)據(jù)

2009-11-26 10:32:57

PHP代碼優(yōu)化

2009-06-30 14:23:02

ORACLE數(shù)據(jù)庫(kù)JSP

2015-08-24 09:26:18

Java內(nèi)存問(wèn)題見(jiàn)解

2021-05-11 22:24:56

C++符號(hào)Tab

2010-10-08 16:32:59

MySQL語(yǔ)句

2017-01-03 15:23:56

Android動(dòng)態(tài)加載SO庫(kù)

2009-06-04 16:28:43

EJB常見(jiàn)問(wèn)題

2017-05-23 14:33:46

簡(jiǎn)歷求職前端開(kāi)發(fā)

2016-10-18 22:10:02

HTTP推送HTML

2021-04-19 17:25:08

Kubernetes組件網(wǎng)絡(luò)

2023-03-28 08:14:42

系統(tǒng)優(yōu)化指標(biāo)

2009-12-11 11:09:12

PHP信息函數(shù)

2021-09-27 09:55:52

深度學(xué)習(xí)編程人工智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)