PHP代码中$run1与$run2变量的作用及使用逻辑问询
问题解答
$run1和$run2属于完全冗余的无效变量,和引用赋值逻辑没有任何关联,删除这两行赋值代码不会对最终运行结果产生任何影响。
逻辑拆解
- 先看
f1函数的特性:- 参数为引用传参(前缀带
&),调用时传入的原数组会被直接修改,不需要依赖返回值回传修改结果 - 函数内部没有定义
return语句,默认返回值为null
- 参数为引用传参(前缀带
- 再看
f2函数的特性:- 参数为普通值传递,调用时会传入外部数组的拷贝,函数内部对参数的修改不会影响外部原数组
- 内部调用
f1拿到的返回值是null,最终f2的返回值也为null
你提到的echo语句完全没有用到$run1和$run2,这两个变量只是接收了两个函数返回的null值,没有参与任何后续逻辑,所以没有实际作用。
额外提醒:你贴出的
f1函数存在参数名拼写错误,形参声明的是$array_para,但函数内部使用的是$array_param,如果按这段代码原样运行,$arr1不会被修改。应该是输入手误,把形参写成&$array_param才符合你描述的逻辑。
运行结果说明
修正上述笔误后,就算删掉$run1 = f1($arr1);和$run2 = f2($arr2);这两行,最终echo的输出依然是changed Lily,原因如下:
- 调用
f1($arr1)时因为是引用传参,直接修改了外部$arr1的内容,所以$arr1["a"]变为changed - 调用
f2($arr2)时是值传递,f2内部修改的只是传入的数组拷贝,不会影响外部$arr2,所以$arr2["a"]保持原有的Lily
内容的提问来源于stack exchange,提问作者user16900687
相关产品推荐
相关产品推荐

