如何在php中创建可选参数?

如何在php中创建可选参数?

How do you create optional arguments in php?

在PHP手册中,为了显示具有可选参数的函数的语法,它们在每组相关的可选参数周围使用方括号。 例如,对于date()函数,手册内容如下:

1
string date ( string $format [, int $timestamp = time() ] )

其中$timestamp是可选参数,当留空时,默认为time()函数的返回值。

在PHP中定义自定义函数时,如何创建像这样的可选参数?


与手册非常相似,在参数定义中使用等号(=):

1
2
3
function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}

The default value of the argument must be a constant expression. It can't be a variable or a function call.

但是,如果需要此功能:

1
2
3
4
5
6
7
function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

假定$bar当然不是布尔值。


我也发现有用的一些注意事项:

  • 保留默认值在右侧。

    1
    function whatever($var1, $var2, $var3="constant", $var4="another")
  • 参数的默认值必须是一个常量表达式。不能是变量或函数调用。


给可选参数一个默认值。

1
2
function date ($format, $timestamp='') {
}

日期函数将定义如下:

1
2
3
4
5
6
7
8
function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

通常,您将使用以下默认值:

1
2
3
4
function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

但是,只有文字是有效的默认参数,这就是为什么我在第一个示例中将null用作默认参数而不是$timestamp = time()并将其与null检查结合的原因。文字包括数组(array()[]),布尔值,数字,字符串和null


如果您不知道需要处理多少个属性,可以使用PHP 5.6中引入的可变参数列表标记(...)(请参阅此处的完整文档)。

句法:

1
function <functionName> ([<type> ]...<$paramName>) {}

例如:

1
2
3
4
5
6
7
8
9
function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

如您所见,该令牌基本上将所有参数都转换为数组,您可以按照自己喜欢的任何方式对其进行处理。


推荐阅读

    linux中ps命令显示?

    linux中ps命令显示?,系统,信息,状态,进程,命令,多地,软件,工作,基础,报告,lin

    linux命令逐页显示?

    linux命令逐页显示?,系统,工作,地址,命令,网上,信息,百度,基础,标准,内容,在l

    linux命令创建项目组?

    linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

    linux的创建目录命令?

    linux的创建目录命令?,名字,地址,位置,密码,软件,系统,命令,目录,文件夹,文

    linux创建端口命令?

    linux创建端口命令?,系统,网络,服务,通讯,检测,工具,端口,电脑,命令,以下,Lin

    linux创建内容的命令?

    linux创建内容的命令?,名字,文件,命令,密码,时间,系统,文件名,终端,目录,文

    linux中显示路径命令?

    linux中显示路径命令?,系统,地址,工作,信息,时间,命令,数据,网络,路径,名字,l

    linux命令多显示几行?

    linux命令多显示几行?,实时,系统,标准,数据,档案,命令,文件,最新,信息,状态,l

    linux下文件创建命令?

    linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,

    linux命令行显示键值?

    linux命令行显示键值?,系统,环境,管理,文化,国家,信息,工具,数据,软件,项目,L

    linux用命令显示键盘?

    linux用命令显示键盘?,系统,信息,工具,电脑,键盘,分析,设备,数据,通用,工作,L

    linux命令分行显示?

    linux命令分行显示?,数据,分行,系统,时间,最新,百度,实时,命令,文件,内容,lin

    linux创建vp命令?

    linux创建vp命令?,系统,工作,基础,设备,地址,命令,目录,环境,信息,工具,linux

    linux命令创建文件加?

    linux命令创建文件加?,名字,管理,系统,名称,密码,首次,命令,文件,文件夹,位

    linux显示路径命令?

    linux显示路径命令?,系统,信息,工作,数据,名称,位置,标准,环境,时间,命令,lin

    linux简单的显示命令?

    linux简单的显示命令?,工具,管理,系统,档案,工作,信息,命令,标准,技术,设备,L

    linux显示用户名命令?

    linux显示用户名命令?,密码,系统,信息,时间,地址,命令,用户,用户名,位置,用

    linux下命令显示行号?

    linux下命令显示行号?,工作,地址,系统,信息,命令,档案,文件,名称,观察,实时,L

    linux命令行最多显示?

    linux命令行最多显示?,信息,系统,数据,档案,标准,文件,命令,名称,地址,最新,l

    linux按命令创建磁盘?

    linux按命令创建磁盘?,系统,信息,业务,号码,数据,情况,电脑,分区,较大,工具,