php传值和传引用的区别,值传递和引用传递的区别?

用户投稿 31 0

关于“php传值和传引用区别”的问题,小编就整理了【3】个相关介绍“php传值和传引用区别”的解答:

值传递和引用传递的区别?

值传递和引用传递是在函数调用和参数传递方面的两种不同机制。

1. 值传递:是将实参的值复制一份给形参,在函数内部对形参的修改不影响实参,因为它们占用的内存是不同的。

这个过程中值传递并不需要被调函数改变主调函数中的实参,所以相互之间会存在一定的隔阂。

2. 引用传递:是传递实参的地址给形参,这样函数内部对形参的修改会影响实参,因为它们占用的内存是同一个。

引用传递的最大优点是可以在被调函数中直接修改主调函数中的实参,因此可以省去返回值的操作。

但同时也存在风险,因为在被调函数中修改实参可能会对主调函数造成意外的影响,所以需要在使用时注意查看整个代码的结构和流程。

区别:

1、值传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果是传递副本,那就是值传递,否则就是引用传递。

2、值传递是传递变量的值,并不会改变方法外变量的值;引用传递是传递对象的地址,会改变对象本身的值。

解释:

值传递(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

传值和传址引用区别?

传值和传址的区别如下:

  1、对实参的影响不同。传值是将实参的值传给形参后,实参与形参间便无任何联系,即形参的变化不会对实参产生任何影响。传值时,在形参前用ByVal来界定。传址是形参与对应实参用相同的内存地址,形参的改变将影响实参。

  2、对形参的影响不同。在传值中函数参数压栈的是参数的副本,任何的修改是在副本上作用,没有作用在原来的变量上。传址中压栈的是指针变量的副本,当对指针解指针操作时,其值是指向原来的那个变量,所以对原来变量操作。

PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?

HP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?

代码如下:

$arr = array('one','two','three');

foreach ($arr as &$value){ echo 'Value:'.$value.'

'; }

foreach ($arr as $value){ echo 'Value:'.$value.'

'; }

?>

输出结果:

Value:one

Value:two

Value:three

Value:one

Value:two

Value:two

第一次带&的foreach并没有改变数组的内容。。

而是最后一次循环$value引用了数组的最后一个项 (可以测试一下,在第一次循环结束后unset($value),第二次循环的结果就不会有变化),

在你第二个foreach也是使用的$value变量,这才造成了怪异的问题(可以换个变量,比如$val,输出的数组就不会有变化)。

第二个foreach是赋值给$value,但是这时的$value是引用的数组的最后一个值,

所以

第一次循环把one赋值给了最后一个值,

到此,以上就是小编对于“php传值和传引用区别”的问题就介绍到这了,希望介绍关于“php传值和传引用区别”的【3】点解答对大家有用。

抱歉,评论功能暂时关闭!