Answers:
参数的默认值必须是一个常量表达式。不能是变量或函数调用。
但是,如果需要此功能:
function foo($foo, $bar = false)
{
if(!$bar)
{
$bar = $foo;
}
}
当然,假设$bar
不会是布尔值。
$bar === false
这是您的意思-这是$bar
默认情况下应执行的操作false
。如果0
传入,这将避免不正确的操作,因此它可以正常工作-除非需要布尔值。正如Kzqai所说,更通用的解决方案是使用$bar = null
,因为当$ bar的值为布尔值时,也可以使用。然后测试变为 if (is_null($bar))
或if ($bar === null)
。
日期函数将定义如下:
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()
,并将其与null检查结合的原因。文字包括数组(array()
或[]
),布尔值,数字,字符串和null
。
如果您不知道需要处理多少个属性,可以使用...
PHP 5.6中引入的可变参数列表token()(请参阅此处的完整文档)。
句法:
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');
如您所见,该令牌基本上将所有参数都转换为数组,您可以按照自己喜欢的任何方式对其进行处理。
function dosomething($var1, $var2, $optionalValue = null)
我找到了这个更好的选择。