導航:首頁 > 編程語言 > php引用傳遞原理

php引用傳遞原理

發布時間:2022-04-11 09:59:13

A. php中按值傳遞和引用傳遞的區別

(1)按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略

(2)按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改

(3)優缺點:

A:按值傳遞時,php必須復制值。特別是對於大型的字元串和對象來說,這將會是一個代價很大的操作。

B.按引用傳遞則不需要復制值,對於性能提高很有好處。

<?php
header('content-type:text/html;charset=utf-8');
//探討一下array,null,對象,資源的默認傳遞方式
//結論(1)array默認是值傳遞,通過加&可以引用傳遞
//(2)null默認是值傳遞,通過加&可以引用傳遞
//(3)資源是值傳遞.通過加&可以引用傳遞
//(4)對象默認也是值傳遞,但是對象值傳遞是對象標識符
$hero=array('no1'=>'蝙蝠俠','no2'=>'超人');
$hero2=&$hero;
$hero2['no1']='蜘蛛俠';
echo'<pre>';
var_mp($hero);

var_mp($hero2);
$a=null;
$b=&$a;
$b='abc';
var_mp($a,$b);
?>

B. PHP如何通過傳引用的思想實現無限分類(代碼

在我的Simpla中,用到了無限分類,使用了PHP的傳引用思想實現無限分類的方法,可以完美展示類似這樣的分類模式。
id pid name
1 0 四川
2 0 重慶
3 1 成都
4
1 綿陽
5 3 高新區
代碼如下所示:
/**
* 數組變成無限級分類--傳引用思想
* @param array $items
* @return array
*/
public static function get_tree($orig) {
//解決下標不是1開始的問題
$items = array();
foreach ($orig as $key => $value) {
$items[$value[『id『]] = $value;
}
//開始組裝
$tree = array();
foreach ($items as $key => $item) {
if ($item[『pid『] == 0) { //為0,則為1級分類
$tree[] = &$items[$key];
} else {
if (isset($items[$item[『pid『]])) { //存在值則為二級分類
$items[$item[『pid『]][『child『][] = &$items[$key]; //傳引用直接賦值與改變
} else { //至少三級分類
//由於是傳引用思想,這里將不會有值
$tree[] = &$items[$key];
}
}
}
return $tree;
}

以上內容很簡單吧,如有錯誤或者更好的方法,希望可以相互交流。謝謝。!

C. php語言中&的原理(有代碼)

&是引用,最終導致的結果是:$c和$a結果是一樣的!

D. 誰能給我講講php中的值傳遞和引用傳遞是怎麼回事,還有就是方法中帶參數有什麼用

值傳遞就是講某個值直接賦給某一個變數,如$a="wetrt"; 而引用傳遞通俗來講就是獲取變數的存儲地址,有了這個地址我就可以隨便更改變數的中的值了。例如:$b="舊值";function a(&$b){ $b="新的值";} 這樣的話你原來$b的值就被改為「新值」了,方法中帶參數肯定是用來向方法中傳遞某個信息了或者說你相對這個參數進行某些操作,比如function a($b){ echo $b;}試想你沒有這個參數變數$b,你怎麼辦?你總不可能上來直接就是function a(){ echo $b;}吧

E. PHP值傳遞和引用傳遞的區別

傳值要重新構造一份原參數的拷貝
傳引用則不需要
傳值對參數的修改不會改變原參數
傳引用時可以直接修改原參數
至於什麼時候傳引用,這看你的需要。
如果你的參數對象比較大(佔用內存很多),而函數本身不需要修改原對象時,這個時候就推薦傳引用,可以省去臨時對象的構造開銷。
如果你有實際修改原參數的需要,那麼就只能傳引用了

F. 請說明php中傳值與傳引用的區別.什麼時候傳值什麼

傳值,
是把實參的值賦值給行參
那麼對行參的修改,不會影響實參的值
傳引用
真正的以地址的方式傳遞參數
傳遞以後,行參和實參都是同一個對象,只是他們名字不同而已
對行參的修改將影響實參的值
所謂值傳遞,就是說僅將對象的值傳遞給目標對象,就相當於;系統將為目標對象重新開辟一個完全相同的內存空間。
所謂引用,就是說將對象在內存中的地址傳遞給目標對象,就相當於使目標對象和原始對象對應同一個內存存儲空間。此時,如果對目標對象進行修改,內存中的數據也會改變。

G. php引用傳遞中的&什麼意思,有什麼用

其實圖片中的文字已經描述得很詳細了,如果你是循序漸進學到這里的,應該是可以理解的啊。
加了&就是引用傳遞,就是把實參的內存地址傳遞給函數內部的形參,這樣的話函數內部對形參的任何修改都會直接影響到外部的實參,也就是說這種情況下實參和形參其實是同一個變數;
而不加&則是值傳遞,就是把實參的值傳遞給函數內部的形參,這時候函數內部對形參的任何修改都與外部的實參沒有任何關系,不會改變實參的值。
打個比方,值傳遞就好比你給某人100塊錢,然後他拿這錢去不管怎麼花都與你無關了;而引用傳遞則好比你把自己的銀行帳號密碼都告訴某人,那麼他此後用這賬號所做的任何消費行為都與你的總資產息息相關了!

H. 如何理解PHP中的傳遞賦值與引用賦值

傳遞賦值,是把你賦值的變數內存地址給函數,在函數里對這個變數做的任何改變都會作用在這個地址上的變數上,函數外使用這個地址的變數也會相應的改變。
引用賦值,相當於給了函數這個變數的副本,在函數內對副本的任何修改都只會改變副本地址上的值,而函數外變數使用的是另外的地址,所以不會改變外面變數。
相當於本體和分身了。。。

I. php引用傳遞和值傳遞的區別

引用傳值:是對象與對象之間進行匹配,
值傳遞:是兩個變數之間進行
例如:
$a = 5;
$a = $b
echo $b; //這是值傳遞
引用傳遞
$a = 5 ;
$b = &$a;
echo $b ;
說白了就是兩個堆棧之間的數據傳送。

J. PHP中的&傳值引用的問題,在foreach循環的結果能幫解釋下輸出的結果原理是什麼

修改了一下,感覺這樣你應該能理解的了了。
感覺你在一個誤區裡面。。

第一次帶&的foreach並沒有改變數組的內容。。而是最後一次循環$value引用了數組的最後一個項
(可以測試一下,在第一次循環結束後unset($value),第二次循環的結果就不會有變化),

在你第二個foreach也是使用的$value變數,這才造成了怪異的問題(可以換個變數,比如$val,輸出的數組就不會有變化)。
第二個foreach是賦值給$value,但是這時的$value是引用的數組的最後一個值,所以,第一次循環把one賦值給了最後一個值,第二次把two賦值給最後一個,第三次也就是最後一個已經在第二次循環被賦值為two,所以仍然是two。

閱讀全文

與php引用傳遞原理相關的資料

熱點內容
酷我mv有加密嗎 瀏覽:234
分時黃金分割主圖源碼 瀏覽:80
如何退出登錄的伺服器 瀏覽:673
為什麼英雄聯盟伺服器早上就卡 瀏覽:370
程序員手機卡頓解決辦法 瀏覽:111
ios系統轉安卓app如何轉 瀏覽:957
手游eve為什麼連接不到伺服器 瀏覽:370
redis命令執行不了 瀏覽:479
移動程序員p7薪資 瀏覽:91
土壤溫濕演算法 瀏覽:587
現在的編譯器都支持c11 瀏覽:939
安卓手機提醒系統更新怎麼辦 瀏覽:792
mastercamkuka機器人離線編程 瀏覽:836
程序員日常生活技巧 瀏覽:741
python如何提取尺寸 瀏覽:755
盧溝橋命令 瀏覽:58
linux將文件移出文件夾命令 瀏覽:138
朗行中控安卓系統怎麼刪除歌曲 瀏覽:714
福昕pdf去除水印 瀏覽:526
為什麼app搜索不到口袋覺醒 瀏覽:916