前言
参数列表是由0个,一个或多个参数组成的。每个参数是一个表达式,用逗号分隔。对于有参函数,在PHP脚本程序中和被调用函数之间有数据传递关系。定义函数时,函数名后面括号内的表达式称为形式参数(简称“形参”),被调用函数名后面括号中的表达式称为实际参数(简称:实参),实参和形参需要按顺序对应传递数据。如果函数没有参数列表,则函数执行的任务就是固定的,用户在调用函数时不能改变函数内部的一些执行行为。例如:前面介绍的九九乘法表multiplicationTable()函数就是没有参数列表函数,每次调用multiplicationTable()函数时都会输出固定的格式,用户连最基本的输出行数都不能改变。
如果函数使用参数列表,函数参数的具体数值就会从函数外部获得。也就是用户在调用函数时,在函数体没有执行之前,将一些数据通过函数的参数列表传递到函数内部,这样函数在执行函数体时,就可以根据用户传递过来的数据决定函数体内部如何执行。所以说,函数的参数列表就是给用户调用函数时提供的操作接口。
通过实际栗子分析
举个例子,工厂生产螺丝,螺丝有不同型号,不同型号代表不同形状以及不同尺寸,这时如果每个不同型号的螺丝都需要单独的机器去生产,如果生产螺丝的型号很多,那得需要多少台机器,得多大厂房才能装得下这些机器,如果这时候有一台机器能够通过调整参数生产不同型号的螺丝,是不是就会节省很多成本,这才是符合我们想法的基本操作。或者就像你去奶茶店,可以选择大杯,中杯,小杯一样,你可以自由选择,这些数据由用户传入,再比如超市收银,收银员会扫条码识别这是什么商品,具体多少钱,这些都需要用户来传入数据作为参数,去生产符合要求的产品或者计算符合需求的结果,通过传入参数来控制系统,这样使用起来更灵活。不可能说为不同产品单独做一个系统吧,万一遇上想降价促销的时候或者上架新品的时候,还得专门去找人开发一台新的收银机系统来适应新的需求,这显然不符合我们现实的操作逻辑。这样还不如计算器好使。再比如我们在地铁站的售票机购买地铁票,我们先选择起点和终点站,系统就会根据我们的选择,计算票价。你放入指定面额的纸币或者硬币,等到你的所付金额等于或超过票价时,系统自动出票,如果所付金额超过票价,机器将会自动给你找零。如果你突然不想坐车了,这时候如果你的操作还没完成,还可以终止操作退出系统,如果付了部分金额,机器会退回已付金额。这里起始站点和终点站,以及你所付的钱都是由你来决定的,由你输入,这就是函数参数最完美的地方,增加了代码的可复用性以及操作的灵活性,我们写代码的时候,只需要写一个函数就能适应多种情况。如果上面的例子还不是很明白,那下面通过代码来继续了解。
编程实践
我们在前面写过计算数字1-100的和,我们之前在代码写死了的,如果这时候我们想计算数字1-1000的和,怎么办?我们看看代码怎么写:
<?php
function sum($number){
$sum = 0;
for($i=1;$i<=$number;$i++){
$sum += $i;
}
return $sum;
}
?>
在定义函数sum()时,添加了1个形参这个参数就是最大数,比如1-100,就是100;需要一个整型数值。这里调用带参数列表的sum()函数,如下所示:
<?php
echo "计算结果如下:<br>";
echo sum(100);
?>
该程序执行后输出结果如下图:
在函数中使用的参数列表,是用户调用函数时传递数据到函数内部的接口。可以根据声明函数是需要设置多个参数,上例中已经设置了1个参数,用来在调用时改变参数来计算累计到哪个数为止。如果还想让用户调用sum()函数,可以改变初始值,比如现在不想从1开始计算,我想自定义初始参数,只要在声明函数时,在参数列表中多设置1个参数即可。
代码如下:
<?php
function sum($start, $end){
$sum = 0;
for($i=$start;$i<=$end;$i++){
$sum += $i;
}
return $sum;
}
echo "计算结果如下:<br>";
echo sum(30, 100);
?>
执行结果如下:
上面我们说了地铁购票的例子,我们看看代码怎么写,我们这里使用代码简单模拟一下。售票系统比这复杂多了,这里只是模拟大概流程:
<?php
/*
$originating 起点站
$terminus 终点站
*/
function saleTickets($line,$originating, $terminus){
//通过选择站点计算票价 地铁是按里程计算的.我们这里只是模拟一下
$station = [
3=>[
'天河客运站-五山' => 2,
'天河客运站-广州东站' => 3,
'天河客运站-林和西' => 4,
'天河客运站-体育西路' => 5
],
4=>[
'黄村-车陂' => 2,
'黄村-车陂南' => 3,
'黄村-万胜围' => 4,
'黄村-官洲' => 5
]
];
echo "你选择的是" . $line . "号线,起始站点-终点站是: " . $originating . "-" . $terminus;
echo "<br>";//<br>是网页中的换行
echo "你的票价是: " . $station[$line][$originating . "-" . $terminus];//数组的用法后面细说
//调用支付系统进行支付
$yourPay = 3;
pay($yourPay, $station[$line][$originating . "-" . $terminus]);
}
//支付系统
function pay($yourPay, $ticketPrice){
if($yourPay>$ticketPrice){
echo "支付成功,正在找零....找回金额为:". ($yourPay-$ticketPrice);
}
elseif($yourPay<$ticketPrice){
echo "请继续支付....已放入金额为:". ($ticketPrice-$yourPay);
}else{
echo "支付成功,正在出票...";
}
}
saleTickets(3,'天河客运站', '体育西路');
执行结果: