php - 许多可选参数

时间:2013-01-02 13:22:49

标签: php function parameters

  

可能重复:
  Any way to specify optional parameter values in PHP?
  PHP function - ignore some default parameters

假设我有这样的功能:

function foo($name = "john", $surname = "smith") { ... }

我这样称呼:

$test = foo("abc", "def");

现在想象一下,我想跳过这个名字,只使用姓氏,这怎么可以实现?如果我只做$ test = foo(“def”);怎么编译器知道我指的是姓氏而不是名字?我知道它可以通过传递NULL来完成,但我需要这个更像这样的东西:

$test = foo($_POST['name'], $_POST['surname']);

提前致谢。

4 个答案:

答案 0 :(得分:3)

你可以试试这个 -

$num_args = func_num_args();
if($num_args == 1)
 $surname = func_get_arg(1);
else
 $surname = func_get_arg(2);
 $name = func_get_arg(1);

请在使用前进行测试。

答案 1 :(得分:2)

您的代码

$test = foo($_POST['name'], $_POST['surname']);
如果它是空的,

也将在第一个PARAMETER中传递NULL,因此编译器将知道它是第二个参数。在参数列表中有comma已经告知PHP这里有两个参数。

答案 2 :(得分:0)

您可以通过将空字符串传递给函数并在函数中检测传递的参数是否为空字符串来实现,如果是,则将其替换为默认值。这会让你的函数调用如下:

foo('','lastname');

您可以将这几行添加到函数的开头,以检测是否已将空字符串作为参数传递:

function foo($name = "john", $surname = "smith") { 
    if($name==='') { $name = 'john'}
    //more code 
    ... }

答案 3 :(得分:0)

我通常会这样做:

function foo($parameters = array())
{
    print_r($parameters);
}

foo($_POST); //will output the array

这是我使用的,当我期望超过3个参数时。

但你不妨使用以下内容:

function foo()
{
    $args = func_get_args();  
    foreach ($args as $arg) {  
        echo "$arg \n";  
    }
}