php 傳值與傳引用的理解(通俗易懂)
php 中遍歷一個array時可以使用for或foreach,foreach的語法為:foreach ($arr as $k => $v)。遍歷陣列,把index賦給$k,陣列的值賦給$v,那麼此處的賦值是傳值還是傳引用呢。先看下面的例子
$arr = array(
array('id' => 1, 'name' => '張三'),
array('id' => 2, 'name' => '李四'),
);
foreach ($arr as $obj) {
$obj['id'] = $obj['id'];
$obj['name'] = $obj['name'] . '-字尾';
}
print_r($arr);
列印結果如下:
Array
(
[0] => Array
(
[id] => 1
[name] => 張三
)
[1] => Array
(
[id] => 2
[name] => 李四
)
)
觀察可以發現在foreach迴圈中對$arr操作並沒有影響到$arr的元素,所以這裡的賦值是傳值而不是傳引用。那如果需要修改$arr中元素的值該怎麼辦呢?可以在變數前面加一個”&”符號,例如:
foreach ($arr as &$obj) {
$obj['id'] = $obj['id'];
$obj['name'] = $obj['name'] . '-字尾';
}
print_r($arr);
列印結果如下:
Array
(
[0] => Array
(
[id] => 1
[name] => 張三-字尾
)
[1] => Array
(
[id] => 2
[name] => 李四-字尾
)
)
下面在講解一些,陣列中是object的情況
$arr = array(
(object)array('id' => 1, 'name' => '張三'),
(object)array('id' => 2, 'name' => '李四'),
);
foreach ($arr as $obj) {
$obj->name = $obj->name . '-字尾';
}
print_r($arr);
列印結果如下:
Array
(
[0] => stdClass Object
(
[id] => 1
[name] => 張三-字尾
)
[1] => stdClass Object
(
[id] => 2
[name] => 李四-字尾
)
)
此時可以看到原始陣列中的object物件已經修改了,所以這裡的賦值又是傳引用而不是傳值
綜合上述,得出的結論:如果陣列裡面存放的是普通型別的元素就是採用傳值的方式,存放物件型別元素採用的方式為傳地址。
相關文章
- 快速搞懂值傳遞與引用傳遞
- 值傳遞和引用傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- shared_ptr 傳值和傳引用
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- PHP中物件的引用傳遞PHP物件
- Python的函式引數傳遞:傳值?引用?Python函式
- 這一次,讓你徹底理解Java的值傳遞和引用傳遞!Java
- Day30--值傳遞和引用傳遞
- Java - 是值傳遞還是引用傳遞Java
- 關於值傳遞和引用傳遞的解釋
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- GO切片傳值/引用/指標Go指標
- js中 函式引數的 傳值/傳引用 問題JS函式
- Python為什麼不是傳值或傳引用? - mathsppPython
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- PHP引用的&理解PHP
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- 解惑4:java是值傳遞還是引用傳遞Java
- vue父子傳值與非父子傳值Vue
- php函式引用傳遞引數的方法PHP函式
- go語言引數傳遞到底是傳值還是傳引用Go
- c++指標傳遞與引用傳遞C++指標
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- java中傳值方式的個人理解Java
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- [精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!Java
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes
- 後臺傳值與dialog的使用
- 你真的理解Python中的賦值、傳參嗎?Python賦值
- 3.React中元件值傳遞的形象理解React元件