你如何在PHP中创build可选参数?
在PHP手册中,为了显示具有可选参数的函数的语法,它们在每个依赖的可选参数集合周围使用括号。 例如,对于date()
函数,手册读取:
string date ( string $format [, int $timestamp = time() ] )
$timestamp
是一个可选参数,当它留空时,它默认是time()
函数的返回值。
在PHP中定义自定义函数时,如何创build可选参数?
与手册类似,在参数定义中使用等号( =
):
function dosomething($var1, $var2, $var3 = 'somevalue'){ // Rest of function here... }
参数的默认值必须是一个常量expression式。 它不能是一个variables或函数调用。
但是,如果您需要此function:
function foo($foo, $bar = false) { if(!$bar) { $bar = $foo; } }
假设$bar
当然不是一个布尔值。
有些笔记,我也发现有用的:
-
保持您的默认值在右侧。
function whatever($var1, $var2, $var3="constant", $var4="another")
-
参数的默认值必须是一个常量expression式。 它不能是一个variables或函数调用。
给可选参数一个默认值。
function date ($format, $timestamp='') { }
如果您不知道需要处理多less个属性,可以使用PHP 5.6中引入的可变参数列表标记( ...
)( 请参阅此处的完整文档 )。
句法:
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');
正如你所看到的,这个标记基本上把所有的参数变成一个数组,你可以用任何你喜欢的方式处理这个数组。
date函数将被定义如下:
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()
或[]
),布尔值,数字,string和null
。