PHP 引用参数怎么用

在日常写代码时,很多新手会碰到“明明函数里改了变量,外面的值却没变化”的问题,这时候大概率是没搞懂“引用参数”的用法。简单说,引用参数就是让函数能直接操作原来的变量,而不是复制一份,就像你把家里钥匙直接交给朋友,朋友开门用的是你家的锁,不是配的新钥匙。

先搞懂普通参数和引用参数的区别

先看个常见的坑。比如你想写个函数,把输入的数字加10:

PHP 引用参数怎么用

`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的引用参数核心就是“直接操作原变量”,用的时候注意只能绑定变量、用完要清理、别滥用,就能避开大部分坑,用它简化代码了。

上一篇 TypeScript 如何做运行时校验