你如何在PHP中创建可选参数?

时间:2008-08-29 17:57:51

标签: php

在PHP手册中,为了显示带有可选参数的函数的语法,它们在每组依赖的可选参数周围使用括号。例如,对于date()函数,手册为:

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

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

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

6 个答案:

答案 0 :(得分:225)

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

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

答案 1 :(得分:46)

  

参数的默认值必须是常量表达式。它不能是变量或函数调用。

如果您需要此功能:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

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

答案 2 :(得分:21)

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

  • 将默认值保留在右侧。

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

答案 3 :(得分:13)

为可选参数指定默认值。

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

答案 4 :(得分:7)

日期函数的定义如下:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

通常,您会将默认值设置为:

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

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

答案 5 :(得分:7)

如果您不知道需要处理多少属性,可以使用PHP 5.6(see full documentation here)中引入的可变参数列表标记(...)。

语法:

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

例如:

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');

正如您所看到的,此令牌基本上将所有参数都转换为数组,您可以按照自己喜欢的方式处理该数组。