php可变长度参数,PHP可变长度参数列表的实用技巧

php5.6添加了一个新的特性,那就是 可变长度参数列表 , 它提供了什么便捷的语法特性呢?

两个例子:

1.可变长度的形参

function foo($name, ...$options)

{

foreach ($options as $val) echo($val);

}

foo('aaa','bbb','ccc','ddd');

//输出的应该是 'bbbcccddd';

这个主要说明使用可变长度形参比原始的 func_get_args() 获取函数参数数组更加方便。

2.可变长度的实参

function foo($name, $value)

{

echo $name.':'.$value;

}

$args = ['k1','v1'];

foo(...$args);

//输出 k1:v1

恩,这个看上去好像跟 call_user_func_array 没什么区别哈 ,写法上简洁一些。

如果仅仅是把两个例子分开看 ,都没有令人心动的感觉,也就是锦上添花罢了,但是看接下来的例子,这是一个需要对另外一个类方法进行封装的场景

class A

{

function foo($a,$b,$c='',$d=''){}

}

//class B 需要调用 class A的foo方法,但是除了第一个参数之外,所有参数原样传递给 A::foo

class B

{

//$a,$b,$c='',$d='' 原样定义

function foo($x,$a,$b,$c='',$d='')

{

//手动填写每个实参

(new A)->foo($a,$b,$c,$d);

}

}

首先B需要知道A::foo方法的所有参数定义,重复定义一次,然后调用的时候还需要逐个传递参数,这一看就感觉很不好,万一 A::foo 定义发生变化,B也要跟着改。

现在有了可变长度参数,我们可以这样写了

class A

{

function foo($a,$b,$c='',$d=''){}

}

//class B 需要调用 class A的foo方法,但是除了第一个参数之外,所有参数原样传递给 A::foo

class B

{

//通过可变长度形参,不需要知道A::foo的定义

function foo($x,...$args)

{

//把 $args 通过可变长度实参功能原封不动传给 A::foo

(new A)->foo(...$args);

}

}

$b = new B;

$argsForA = [1,2];

$b->foo('x', ...$argsForA);//可变长度实参

是不是瞬间感觉解放了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值