php默认参数

时间:2011-05-11 18:37:58

标签: php arguments

在PHP中,如果我有一个像这样写的函数

function example($argument1, $argument2="", $argument3="")

我可以在其他地方调用此功能

example($argument1)

但是如果我想给thrid参数赋予一些价值, 我应该这样做吗

example($argument1, "", "test");

或者

 example($argument1, NULL, "test");

我认为两者都有效,但更好的方法是什么?因为将来如果在main函数中更改$ argument2的值并且如果我有“”,那么会有任何问题吗?或者NULL是最好的选择吗?

由于

4 个答案:

答案 0 :(得分:15)

为您不想指定的参数传递null""仍然会导致传递给函数的那些空值和空字符串。

使用参数默认值的唯一情况是调用代码中的参数是NOT SET ALL。 example('a')会让args#2和#3获得默认值,但是如果你执行example('a', null, "")那么arg#3为null并且arg#3是函数中的空字符串,而不是默认值。

理想情况下,PHP会支持像example('a', , "")这样的东西来允许将默认值用于arg#2,但这只是一个语法错误。

如果你需要在函数调用中间保留参数但是为后面的参数指定值,你必须在函数本身中显式检查一些sentinel值并自己设置默认值。


以下是一些示例代码:

<?php

function example($a = 'a', $b = 'b', $c = 'c') {
        var_dump($a);
        var_dump($b);
        var_dump($c);
}

以及各种输入:

example():
string(1) "a"
string(1) "b"
string(1) "c"

example('z'):
string(1) "z"
string(1) "b"
string(1) "c"

example('y', null):
string(1) "y"
NULL
string(1) "c"

example('x', "", null):
string(1) "x"
string(0) ""
NULL

请注意,只要在函数调用中为参数指定ANYTHING,该值就会传递给函数并覆盖函数定义中设置的默认值。

答案 1 :(得分:11)

您可以使用:

example($argument1, '', 'test');

或者

example($argument1, NULL, 'test');

您始终可以使用而不是空字符串来检查NULL:

if ($argument === NULL) {
    //
}

我认为这完全取决于使用args在函数内部发生的事情。

答案 2 :(得分:1)

如果您在函数定义中将可选参数定义为null并保持这种方式,我认为您会得到更好的服务,因此将它们称为example($argument1, NULL, $argument="test")。只需确保如何在函数本身中使用null'd参数来不引发任何警告。只要您确定如何在函数本身中使用该参数,您也可以使用false

如果您似乎有很多问题,更好的方法是使用单个关联数组作为变量选项:

function example($optionsIn = array()) {

    $options = array(
        'var1' => null,
        'var2' => 'something',
        'var3' => 'else'
    ) ;

    $options = array_merge($options, $optionsIn) ;
}


$options = array(
    'var2' => 'different'
) ;

example($options) ;

这样你就可以传入你想要的任何函数参数,留下任何其他参数,并确保在函数中定义了适当的默认值。

唯一的缺点是预期的参数对函数签名是隐藏的,但您可以在函数的docblock中记录它们。

答案 3 :(得分:0)

这取决于功能的特殊性。

function a($b=true,$c=false){
 echo $b?'true':'false';
 }
执行

 a(NULL, 1);

结果: false 。但只是a()结果: true

这意味着您需要默认参数,那么您应该使用默认值:

 a(true, 1);