要使函数正常工作,它们中的大多数都需要一个或多个参数。参数允许将数据传给函数。这里有一个只需要一个参数的函数例子。这个函数带有一个一维数组并将它按表格形式显示出来,如下所示:
function create_table($data){
echo"<table border=/"1/">";
reset($data);//Remember this is used to point to the beginning
$value=current($data);
while($value){
echo"<tr><td>".$value."</td></tr>/n";
$value=next($data);
}
echo"</table>";
}
如果按如下所示调用create_table函数:
$my_array=array('Line one.','Line two.','Line three.');
create_table($my_array);
将看到如图5-4所示的结果。
传递参数允许我们获得在函数外面生成的数据(在这个例子中,就是数组$data)将被传入函数中。
和内置函数一样,用户定义函数可以有多个参数和可选参数。我们有很多方式来改进create_table函数,但却只有一个方法可以让调用者指明边界或表格的其他属性。在这里,我们给出了该函数的一个改进版本。它非常类似于改进前的函数,但允许调用者可选地设置表格的边界、宽度、单元大小和空白填充,如下所示:
<?php
function create_table2($data,$border=1,$cellpadding=4,$cellspacing=4){
echo"<table border=/"".$border."/"cellpadding=/"".$cellpadding."/"
cellspacing=/"".$cellspacing."/">";
reset($data);
$value=current($data);
while($value){
echo"<tr><td>".$value."</td></tr>/n";
$value=next($data);
}
echo"</table>";
}
$my_array=array('Line one.','Line two.','Line three.');
create_table2($my_array,3,8,8);
create_table2函数的第一个参数还是必需的。而后三个参数都是可选的,因为已经在函数中为它们定义了默认值。所以可以调用create_table2生成类似于图5-4所示的输出结果。
图 5-4 调用函数create_table后出现的HTML表格create_table2($my_array);
如果希望以更分散的风格输出这些数据,可以按如下所示方式调用该函数:
create_table2($my_array,3,8,8);
可选值不用全部给出;可以给出一部分而忽略一部分。参数将会按照从左到右的顺序进行赋值。
请记住,不能漏掉一个可选参数而给出参数列表中的后一个参数。在这个例子中,如果希望将一个值传给cellspacing,就必须也得传给cellpadding一个值。这是编程过程中的常见错误,也是可选参数在每个参数列表中最后被指定的原因。
如下所示的函数调用:
create_table2($my_array,3);
是完全合法的,结果是$border被设为3,$cellpadding和$cellspacing都被设为默认值。
也可以声明能够接收可变参数数量的函数。通过3个帮助器函数:func_num_args、func_get_arg以及func_get_args,可以确定已经传递了多少个参数以及这些参数的值。
例如,分析如下所示的函数:
function var_args{
echo"Number of parameters:";
echo func_num_args;
echo"<br/>";
$args=func_get_args;
foreach($args as$arg){
echo$arg."<br/>";
}
}
这个函数报告传递给它的参数个数并且打印每一个参数。func_num_args函数将返回传入的参数个数。而func_get_args函数将返回参数的数组。或者,可以使用func_get_arg函数一次获得一个参数,该函数需要以希望访问的参数个数作为参数(参数从0开始)。