2013-01-02 51 views
3

可能重复:
Any way to specify optional parameter values in PHP?
PHP function - ignore some default parametersPHP - 许多可选参数

假设我有功能是这样的:

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

我打电话来是这样的:

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

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

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

在此先感谢。

+0

[PHP函数 - 忽略某些默认参数]的可能重复(http://stackoverflow.com/questions/9541776/php-function-ignore-一些默认参数)。另请参见[是否可以省略函数调用中的随机参数?](http://stackoverflow.com/questions/14120071/is-it-possible-to-omit-random-parameters-in-a-function-call ) –

回答

2

您的代码

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

也将通过NULL在第一个参数,如果它是空的,所以编译器会知道它是到第二个参数。在参数列表中有一个comma已经通知PHP这里有两个参数。

0

您可以通过向您的函数传递一个空字符串并在函数中检测传入的参数是否为空字符串,如果是,则将其替换为默认值。这将使你的函数调用,比如:

foo('','lastname'); 

你可以几行添加到您的函数的开始,如果一个空字符串被作为参数传递给检测:

function foo($name = "john", $surname = "smith") { 
    if($name==='') { $name = 'john'} 
    //more code 
    ... } 
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); 

请在使用它之前测试它。

+0

+1为最佳答案,我打算张贴那一个,但谁是第一个值得奖励。 –

+0

@AspiringAqib:thx .... –

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

+1另一个想法很好解释更多,所以他可以使用这个! –

+0

如果只有两个变量必须被函数使用,那么这会浪费内存,但整个$ _POST数组作为参数传递。 –