0
函数 getTemplate($tpl if ($vars) echo ", $vars";)...函数

这有可能吗?以上是行不通的。

谢谢

4

4 回答 4

6

Optional arguments with default values

It looks like you want an optional argument, which you can accomplish by defining a default value in the function definition:

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

}

You can call this function as getTemplate($foo) or getTemplate($foo,$bar). See the PHP manual page on function arguments for more details.

Variable numbers of arguments

It's also possible to write functions which take a variable number of arguments, but you need to use func_num_args, func_get_arg and func_get_args functions to get at them. Here's an example from the manual

<?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);
?>

Calling a function with a variable number of parameters

To round off this answer even more, suppose you'd build an array of 1..n values and wanted to pass it to the foo() function defined above? You'd use call_user_func_array

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

This is the equivalent of calling

foo(1,2,3,4);
于 2009-01-22T16:30:20.493 回答
2

What's so bad about

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

?

于 2009-01-22T16:23:26.277 回答
0
if ($vars) { getTemplate($tpl, $vars); }
else {{ getTemplate($tpl, null); }

(半伪代码)

于 2009-01-22T16:19:40.497 回答
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() 调用中。

于 2009-01-22T16:22:26.607 回答