在PHP手册中,为了显示带有可选参数的函数的语法,它们在每组依赖的可选参数周围使用括号。例如,对于date()
函数,手册为:
string date ( string $format [, int $timestamp = time() ] )
其中$timestamp
是可选参数,当留空时,默认为time()
函数的返回值。
在PHP中定义自定义函数时,如何创建这样的可选参数?
答案 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');
正如您所看到的,此令牌基本上将所有参数都转换为数组,您可以按照自己喜欢的方式处理该数组。