你如何在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