我试图理解一些代码,但有些东西我还是没有。 该代码使用对参数中数组的引用和功能块中的引用。我创建了以下示例代码:
function some_function(&$array)
{
// assign a value to a new key in the empty array
$array['somekey'] = 'somevalue';
// set the array to reference this key
$array = &$array['somekey'];
// var_dump() of the array shows 'somevalue'
var_dump($array);
}
$my_array = [];
some_function($my_array);
// var_dump() now shows the initial value of ['somekey'] => 'somevalue' ???
var_dump($my_array);
下面是2个var_dumps的输出。
string(9) "somevalue" array(1) { ["somekey"]=> string(9) "somevalue" }
我的问题是:为什么离开函数后第二个赋值会被忽略?
答案 0 :(得分:0)
因为引用不能像C指针那样工作。
上的PHP手册由于引用函数my_array在some_function()函数中不可用,因此无法使用引用机制将调用范围中的$ my_array绑定到其他对象。
答案 1 :(得分:0)
第二项分配不会被忽略。让我们逐行细分代码。
$my_array = [];
some_function($my_array);
function some_function(&$array)
{
现在,符号$my_array
(在全局范围内)和符号$array
(在函数的本地范围内)都引用了相同的空数组。
// assign a value to a new key in the empty array
$array['somekey'] = 'somevalue';
这将修改数组,并且两个符号仍引用它。
// set the array to reference this key
$array = &$array['somekey'];
此行告诉PHP,符号$array
现在应引用字符串'somevale'。但是符号$my_array
不受它的影响。如果要更改两个符号都引用的值,只需使用常规分配即可:
$array = $array['somekey'];
和两个var_dumps将显示相同。
答案 2 :(得分:0)
function some_function(&$ array){}将 array-argument 的第一个元素$ array [0]的地址作为参考地址。在函数中,重新分配只是将$ array [0]的值更改为$ array,将$ array的值重新分配为 point ,将其更改为 array ['somekey'] ,并将值更改为<重新分配后,strong> $ array 会更改 array ['somekey'] 的值。
<?php
function some_function(&$array)
{
// assign a value to a new key in the empty array
$array['somekey'] = 'somevalue';
echo gettype($array);
echo "<br>";
var_dump($array);
echo "<br>";
// set the array to reference this key
$array = &$array['somekey'];
// var_dump() of the array shows 'somevalue'
var_dump($array);
echo "<br>";
echo gettype($array);
echo "<br>";
$array='different value';
echo "<br>";
echo gettype($array);
echo "<br>";
var_dump($array);
}
$my_array = [];
echo "<br><br>";
var_dump($my_array);
some_function($my_array);
echo "<br><br>";
// var_dump() now shows the initial value of ['somekey'] => 'somevalue' ???
var_dump($my_array); // ['somekey'] shows 'different value' because the value was changed in the function.
echo "<br><br>";
echo gettype($my_array);
echo "<br><br>";
?>