PHP 可变参数怎么用

刚接触PHP的朋友,大概率会遇到这种情况:想写个函数做加法,但有时候要加2个数,有时候要加5个,难道要写好几个不同参数的函数吗?其实不用,PHP的可变参数就能轻松解决这个问题,就像你去奶茶店点单,有时候加1种料,有时候加3种,不用每次都跟店员说新的点单规则。

什么是PHP可变参数?

简单说,可变参数就是让函数可以接收数量不固定的参数,不用提前规定死参数个数。还是用奶茶店举例:你要的奶茶,糖度是固定的,但是加料可以灵活选,加珍珠、椰果、芋圆,想加几个加几个,这个“想加几个加几个的加料清单”,就是PHP里的可变参数。

PHP 可变参数怎么用

举个最直观的例子,写一个算总和的函数。如果不用可变参数,你得写死最多加3个数:

`php

// 固定参数的函数,最多只能算3个数的和

function add_three($a, $b, $c) {

return $a + $b + $c;

}

// 只能传3个参数,传2个会报错

add_three(1,2); // 报错

`

但用了可变参数,不管传2个、5个还是10个数字,都能算总和,是不是方便多了?

怎么用PHP实现可变参数?

PHP给了两种很简单的方法,新手不用记复杂的语法,看例子就能会。

方法1:用 ... 符号(最常用)

这是PHP 5.6之后推荐的写法,把参数里的最后一个变量加上 ...,就告诉PHP:“这里接收的是可变数量的参数,会自动打包成一个数组”。

还是用加法函数举例:

`php

// 可变参数用$nums来接收,前面加...

function add_all(...$nums) {

$total = 0;

// 遍历打包好的数组,把所有数加起来

foreach ($nums as $num) {

$total += $num;

}

return $total;

}

`

测试一下:传2个参数 add_all(10,20),返回30;传5个 add_all(1,2,3,4,5),返回15,不管传多少都对,完美解决了之前的问题。

再举个生活化的例子:你帮朋友买水果,有时候买2种,有时候买4种,用这个可变参数的函数,就能统计总花费:

`php

function total_price(...$fruits) {

// 每个水果的价格是数组,比如['苹果'=>5, '香蕉'=>3]

$sum = 0;

foreach ($fruits as $price) {

$sum += array_values($price)[0];

}

return $sum;

}

// 买苹果和香蕉,总花费是5+3=8

echo total_price(['苹果'=>5], ['香蕉'=>3]);

`

方法2:用 func_get_args() 函数(兼容老版本)

如果你的PHP版本是5.6之前的,不能用 ... 符号,就用 func_get_args() 这个函数,它能把函数接收到的所有参数,打包成一个数组,用法也很简单:

`php

function add_with_func() {

// 直接拿到所有参数的数组

$nums = func_get_args();

$total = 0;

foreach ($nums as $num) {

$total += $num;

}

return $total;

}

`

这个方法虽然也能实现,但不如 ... 符号直观,现在新的项目基本都用 ... 了。

可变参数的小注意事项

  • 一个函数里,可变参数只能有1个,而且要放在参数的最后。比如不能写 function func(...$a, $b),不然PHP不知道哪个是可变的,会报错。
  • 如果函数有固定参数,可变参数可以和固定参数一起用。比如写一个函数,先收一个“活动名”,再收多个“参与人”:

`php

function activity($name, ...$people) {

echo "活动:$name,参与人:" . implode('、', $people);

}

// 输出:活动:运动会,参与人:小明、小红、小丽

activity('运动会', '小明', '小红', '小丽');

`

这样既保证了活动名必须有,又灵活支持不同数量的参与人,非常实用。

其实可变参数就是PHP给函数的“灵活性”,就像你用手机拍照,默认是16:9,拍风景可以调比例,拍人像也能单独裁,不用每次换手机。学会这个功能,以后写代码就不用反复写重复的函数啦。

上一篇 Swift编程语言的核心特性与常见应用场景知识科普