php引用传递和值传递的区别
内容导读
收集整理的这篇技术教程文章主要介绍了php引用传递和值传递的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1583字,纯文字阅读大概需要3分钟。
内容图文
按值传递
函数范围内对值的任何改变在函数外部都会被忽略,值传递是把值拷贝一份,两个变量指向两个内存地址。
$a = 6;$b = $a; // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a 和 $b 不在一个地址中,更改任意变量的值对对方无影响$b = 7;echo $a; //输出:6function foo($b){ echo ++$b;}foo($b); // 输出:8 echo $b; // 输出:7 说明函数内的改变对函数外的值没有影响,因为,当 $b 传入函数内的时候是值传递,会把值在内存中拷贝一份存入一个新的内存地址中
按引用传递
函数范围内对值的任何改变在函数外部也能反映出这些修改,引用传递是将一个变量的内存地址标识传给了内外一个变量,两个变量最终指向内存同一个地址。
$a = 6;$b = &$a;$b = 7;echo $a; //输出:7 function foo(&$c){ echo ++$c;}foo($b); // 输出:8 echo $b; // 输出:8 说明函数内的改变对函数外的值有影响,因为,当 $b 传入函数内的时候是引用传递,函数体内的$b和外部的$b实际上是指向同一个内存地址,所以一个改变,另外一个变量的值也会改变
function func(&$arr){ $arr['a'] = []; $arr = &$arr['a']; $arr['b'] = '333'; var_dump($arr);}$arr = [ 'a' => '111', 'b' => '222'];func($arr);var_dump($arr);/**# 第一个输出:array(1) { ["b"]=> string(3) "333"}# 第二个输出:array(2) { ["a"]=> array(1) { ["b"]=> string(3) "333" } ["b"]=> string(3) "222"}*/
上面的示例明明还是引用传递进去的为啥会两个 $arr 打印出不一样的结果呢?
因为里面有一步操作 $arr = &$arr['a']; 这一步之后函数内的 $arr 的指向地址已经改变,指向了$arr['a'],所以两次打印的结果不一样。
注意:php 中对于对象默认引用传值一般引用传值用在需要在函数体内改变传入参数并且需要影响外部变量的时候使用,其他时候一般使用值传递。
推荐教程:PHP视频教程
以上就是php引用传递和值传递的区别的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的php引用传递和值传递的区别全部内容,希望文章能够帮你解决php引用传递和值传递的区别所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。