php里面的形参和实参?

$arr = array(1, 2, 3);
function func ($brr) {
  $brr[0] = 10;
}
func($arr);
print_r($arr); 

// 结果如下
(
    [0] => 1
    [1] => 2
    [2] => 3
)

现象:原数组没有被改变
问题:php中好像,形参改变不了实参?实参给形参传值,是不是把实参复制了一份,传给了形参?

阅读 1.6k
1 个回答

其实这个涉及到的是一个引用传递的问题,在官方手册中明说了,对象 会被引用传递。

也就是说如果你传递的是一个对象,那么默认就会是原实例,如果是其他类型的,就将会是一个新的拷贝。

如你的代码,如果想要实现你想要的效果,只需要在方法声明的形参前面加上引用符号 &,即可。

$arr = array(1, 2, 3);
function func (&$brr) {
  $brr[0] = 10;
}
func($arr);
print_r($arr); 

这样,你就会得到一个理想的结果

Array
(
    [0] => 10
    [1] => 2
    [2] => 3
)

这个引用也是比较隐晦的,比如下图中,如果你不去运行一下,你很难猜出结果来。

参考资料

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题