php函数中可变数量的参数列表及三个点语法
PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 ... 语法实现;在 PHP 5.5 及更早版本中,使用函数 func_num_args(),func_get_arg(),和 func_get_args() 。
最近在看laravel框架的时候,看到了三个点语法(...$param)
Illuminate\Database\Eloquent\Model 类中
public static function __callStatic($method, $parameters)
{
return (new static)->$method(...$parameters);
}
当调用到未定义的静态方法时,此魔术方法被调用,$method为方法名,$parameters为此方法传递的多个参数组成的数组,参数个数及类型未知,在调用的时候使用...语法,就可以将参数拆分成参数列表传递给$method函数。
我们知道laravel或thinkphp的查询构造器的参数传递是很灵活的,因此,...语法在函数封装上就很方便了。
当然$method函数也可以定义为只接收一个数组参数,这样就不用使用...语法了;只是这样定义的函数可读性较差,无法一眼就看出的函数使用。
用法:
在定义函数的时候和普通的函数一样的,就是在调用的时候传参加三个点
调用:
public function __call($method, $parameters)
{
if (in_array($method, ['increment', 'decrement'])) {
return $this->$method(...$parameters);
}
return $this->newQuery()->$method(...$parameters);
}
定义:
protected function increment($column, $amount = 1, array $extra = [])
{
return $this->incrementOrDecrement($column, $amount, $extra, 'increment');
}
三个点语法还有一种使用方式:
1、多个变量-->一个数组
在定义的时候使用三个点语法,在调用的时候传递参数列表,参数列表将会自动组合成数组穿个函数了。
function sum(...$numbers) {
print_r($numbers);
}
echo sum(1, 2, 3, 4);
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
2、一个数组-->多个变量
条件是:$param是索引数组,如果是关联数组会报错
function a($param){
var_dump(...$param);
test(...$param);
}
a([1,2,'b']);
int(1)
int(2)
string(1) "b"
test()方法需要传递传递多个变量。
php函数中可变数量的参数列表及三个点语法

最新推荐文章于 2024-08-03 15:09:14 发布
