PHP 引用参数怎么用
在日常写代码时,很多新手会碰到“明明函数里改了变量,外面的值却没变化”的问题,这时候大概率是没搞懂“引用参数”的用法。简单说,引用参数就是让函数能直接操作原来的变量,而不是复制一份,就像你把家里钥匙直接交给朋友,朋友开门用的是你家的锁,不是配的新钥匙。
先搞懂普通参数和引用参数的区别
先看个常见的坑。比如你想写个函数,把输入的数字加10:

`php
function addTen($num) {
$num = $num + 10;
}
$a = 5;
addTen($a);
echo $a; // 输出还是5,没变
`
为什么会这样?因为普通参数是“传值”——把$a里的5复制一份,传给函数里的$num,函数里改的是这个复制的$num,和原来的$a没关系,就像你给朋友带了一杯奶茶,朋友喝的是这杯新的,你自己的那杯还在。
如果改成引用参数,就不一样了。只要在函数定义的参数前加个&符号,就是告诉PHP:“这个参数不要复制,直接用原来变量的地址”:
`php
function addTen(&$num) {
$num = $num + 10;
}
$a = 5;
addTen($a);
echo $a; // 输出15,变了
`
这时候相当于把你家的钥匙(变量地址)给了函数,函数开的就是你家的门,改的自然是你原来的$a,是不是像把奶茶直接递给朋友,他喝的是你的那杯?
引用参数的使用注意事项,别踩坑
虽然引用参数很方便,但用不对就容易出bug,这几个点一定要记牢。
第一,引用参数只能是变量,不能是固定值。比如你不能写addTen(&5),就像你不能把“钥匙”直接换成“锁芯”,只有真实存在的变量才有地址,固定值是没有的,PHP会直接报错。
第二,传引用后,原来的变量会被“绑定”。后面再用这个变量的时候,不管是不是经过函数,都相当于引用。比如你写完addTen(&$num),再写$b = $num,其实$b也是引用,改$b会影响原来的$num,就像你把钥匙同时给了两个人,其中一个开门动了锁,另一个开门也会看到变化。
第三,别过度用引用。比如循环里如果不小心用了引用,很容易出问题。比如:
`php
foreach($arr as &$val) {
$val = $val * 2;
}
// 循环结束后,$val还是引用,这时候如果写$another = 5;
$another = 5; // 相当于$val=5,会覆盖数组最后一个元素的值
`
就像你给朋友留了钥匙,忘了收回来,后来随便一个人用这个钥匙开门,就会乱改东西,所以用完引用变量最好 unset 掉,比如unset($val),把“钥匙”收回来。
什么时候该用引用参数?
很多新手觉得引用参数好用,就到处用,其实没必要,只有两种场景适合用。
第一种是想让函数返回多个值,因为PHP函数只能返回一个值,用引用参数可以“带回”额外的结果。比如你写个获取用户信息的函数,想同时拿到用户的年龄和是否有会员:
`php
function getUserInfo($userId, &$isVip) {
$user = ['name' => '小明', 'age' => 25];
$isVip = ($user['age'] > 18); // 把结果通过引用参数带出去
return $user;
}
$user = getUserInfo(1, $isVip);
echo $user['name']; // 小明
echo $isVip ? '是会员' : '不是会员'; // 是会员
`
第二种是操作大量数据,比如处理几百上千条数组,如果用传值,每次都要复制整个数组,会占用很多内存,用引用参数就直接操作原数据,更高效,就像你搬一堆书,直接搬整堆比搬复制的副本省力气。
总之,PHP的引用参数核心就是“直接操作原变量”,用的时候注意只能绑定变量、用完要清理、别滥用,就能避开大部分坑,用它简化代码了。