根据下面的PHP代码,输出是
1 . 1
2 . 2
3 . 3
Run Code Online (Sandbox Code Playgroud)
我理解&$ ref是通过引用传递的.但是就像赋值($ row =&$ ref;)之后,只要'row'改变了值,'ref'就会变成与'row'相同的值.真的很混乱.似乎=不仅仅是向左分配正确的值.有人可以验证一下吗?
<?php
$ref = 0;
$row = &$ref;
foreach (array(1, 2, 3) as $row) {
print "$row . $ref \n" ;
}
echo $ref;
?>
Run Code Online (Sandbox Code Playgroud)
无需过多深入研究技术细节$ref,这里的基本思想是您已经参考了$row. 具体来说,$row位于某个内存地址。如果你做一个简单的作业
$ref = $row;
Run Code Online (Sandbox Code Playgroud)
然后$ref是的副本$row。如果你改变一个,就不会改变另一个
$row = &$ref;
Run Code Online (Sandbox Code Playgroud)
$ref现在指向$row. 所以它们本质上是相同的变量。它们指向相同的内存位置(过于简单化,所以你明白了)。
最常见的用途是您需要向函数中注入一些值。
$data = ['1', '2', '3'];
function modVal(Array &$arr) {
$arr[2] = '9';
}
modVal($data);
var_dump($data);
Run Code Online (Sandbox Code Playgroud)
生产
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "9"
}
Run Code Online (Sandbox Code Playgroud)
但是,从函数声明中删除&,输出变为
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
Run Code Online (Sandbox Code Playgroud)
PHP 有时会自动为您传递引用。例如,如果您实例化一个类并将该实例注入到函数中,它将自动通过引用传递。
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |