PHP - 多个可选参数

3

可能重复:
有没有办法在PHP中指定可选参数值?
PHP函数-忽略某些默认参数

假设我有这样的一个函数:

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

我是这样调用的:

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

现在想象一下,我想跳过名字只使用姓氏,这该如何实现?如果我只写 $test = foo("def"); 编译器怎么知道我是在引用姓氏而不是名字呢?我知道可以通过传递 NULL 来实现,但我需要更多类似下面的操作:

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

感谢您的提前帮助。

可能是PHP函数-忽略一些默认参数的重复问题。还可以参考在函数调用中是否有可能省略随机参数? - Álvaro González
4个回答

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 对最佳答案,我本来要发布那个答案的,但是谁先回答就应该得到奖励。 - Muhammad Talha Akbar

2

您的代码

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

如果第一个参数为空,那么将在第一个参数中传递NULL,这样编译器就知道由第二个参数来控制。如果参数列表中有逗号,PHP将自动知道这里有两个参数。

0
你可以通过将一个空字符串传递给函数,并在函数中检测传递的参数是否为空字符串,如果是,则用默认值替换它来实现。这将使您的函数调用如下所示:
foo('','lastname');

你可以在函数开头添加以下几行代码来检测是否将空字符串作为参数传递:

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

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";  
    }
}

1
再提供一个好点子,详细解释一下,这样他就可以使用这个了! - Muhammad Talha Akbar
如果函数只需要使用两个变量,却将整个 $_POST 数组作为参数传递,则会浪费内存。 - Peeyush Kushwaha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接