5.6 使用参数

要使函数正常工作,它们中的大多数都需要一个或多个参数。参数允许将数据传给函数。这里有一个只需要一个参数的函数例子。这个函数带有一个一维数组并将它按表格形式显示出来,如下所示:


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.6 使用参数 - 图1

图 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开始)。