php里面的形参和实参?

$arr = array(1, 2, 3);

function func ($brr) {

$brr[0] = 10;

}

func($arr);

print_r($arr);

// 结果如下

(

[0] => 1

[1] => 2

[2] => 3

)

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

回答

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

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

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

$arr = array(1, 2, 3);

function func (&$brr) {

$brr[0] = 10;

}

func($arr);

print_r($arr);

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

Array

(

[0] => 10

[1] => 2

[2] => 3

)

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

参考资料

以上是 php里面的形参和实参? 的全部内容, 来源链接: utcz.com/a/33566.html

回到顶部