首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》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-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开始)。