总结
豆包 AI 助手文章总结

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

王林
发布: 2019-09-16 11:59:41
原创
3651人浏览过

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

按值传递

函数范围内对值的任何改变在函数外部都会被忽略,值传递是把值拷贝一份,两个变量指向两个内存地址。

$a = 6;
$b = $a; // 这是值传递,把 $a 的值拷贝给了 $b,在内存中 $a 和 $b 不在一个地址中,更改任意变量的值对对方无影响
$b = 7;
echo $a; // 输出:6

function 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视频教程

以上就是php引用传递和值传递的区别的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号