函数functionName(这里是if子句)可能吗?

时间:2009-01-22 16:17:36

标签: php if-statement

function getTemplate($tpl if ($vars) echo ", $vars";)...function

这有可能吗? 以上不会工作。

由于

4 个答案:

答案 0 :(得分:6)

具有默认值

的可选参数

看起来你想要一个可选参数,你可以通过在函数定义中定义一个默认值来完成:

function getTemplate($tpl, $vars=null)   
{

}

您可以将此函数称为getTemplate($ foo)或getTemplate($ foo,$ bar)。有关详细信息,请参阅PHP manual page on function arguments

可变数量的参数

也可以编写带有可变数量参数的函数,但是您需要使用func_num_argsfunc_get_argfunc_get_args函数来获取它们。这是手册中的一个例子

<?php
function foo() 
{
   $numargs = func_num_args();
   echo "Number of arguments: $numargs<br />\n";
   if ($numargs >= 2) {
       echo "Second argument is: " . func_get_arg(1) . "<br />\n";
   }
   $arg_list = func_get_args();
   for ($i = 0; $i < $numargs; $i++) {
       echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
   }
} 

foo(1, 2, 3);
?>

调用具有可变数量参数的函数

为了更加完善这个答案,假设您构建了一个1..n值的数组,并希望将它传递给上面定义的foo()函数?您将使用call_user_func_array

$values=(1,2,3,4);
call_user_func_array('foo', $values);

这相当于调用

foo(1,2,3,4);

答案 1 :(得分:2)

有什么不好的
function getTemplate($tpl, $vars=null)   {}

答案 2 :(得分:0)

if ($vars) { getTemplate($tpl, $vars); }
else {{ getTemplate($tpl, null); }

(半伪代码)

答案 3 :(得分:0)

或者:

getTemplate($tpl, ($vars)?$vars:null); // not sure

getTemplate($tpl, (!empty($vars))?$vars:null);

另外,如果你想要一种类似于echo的技术:

$code = "getTemplate($pl";
if ( $vars ) { $code = $code . ", $vars);"; }
else { $code = $code . ");"; }
$ret = eval($code);

虽然这通常被认为是不好的做法(从不说永远不会)。 请注意,发送到eval 的所有代码都将直接执行。所以不要将用户输入放在eval()调用中。