PHP变长参数?

Python和其他语言中,可变长度参数列表有特殊的语法:
def do_something(*args):
    # do something

do_something(1,2,3,4,5,...) # arbitrarily long list

我正在阅读PHP手册,它说:

PHP 4 and above has support for
variable-length argument lists in
user-defined functions. This is really
quite easy,using the func_num_args(),
func_get_arg(),and func_get_args()
functions.

No special Syntax is required,and
argument lists may still be explicitly
provided with function deFinitions and
will behave as normal.

我得到了第一部分.您可以将任意数量的参数传递给不带参数的函数,然后使用func_get_args()等将它们作为数组传递.但是,我并没有真正得到第二部分所说的内容.

所以,我的问题是,是否有一些特殊的可变长度参数语法,或者一些我不知道的最佳实践?手册建议的方法充其量只是kludgey并使你的功能似乎没有参数(除非我做错了).我根本不应该尝试使用这种语言功能吗?

与Python的*运算符或C#的params关键字不同,在PHP中,您甚至不必指定可变长度参数.第二部分开始时,“不需要特殊的语法.”

至于第二段的其余部分:如果要指定可变长度参数之前的任何必需或不相关的参数,请在函数签名中指定它们,以便函数可以处理这些参数.然后要获取可变长度参数,从func_get_args()中删除所需的变量,如下所示:

function func($required) {
    // Contains all arguments that come after $required
    // as they were present at call time
    $args = array_slice(func_get_args(),1);
}

您不必这样做(您仍然可以从func_get_args()切片并相应地使用其不同的元素),但它确实使您的代码更加自我记录.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...