写点什么

【web 开发基础】通过模拟地铁售票系统介绍 PHP 自定义函数之函数的参数 -PHP 快速入门 (26)

作者:迷彩
  • 2022-11-08
    广东
  • 本文字数:2141 字

    阅读完需:约 7 分钟

前言

参数列表是由 0 个,一个或多个参数组成的。每个参数是一个表达式,用逗号分隔。对于有参函数,在 PHP 脚本程序中和被调用函数之间有数据传递关系。定义函数时,函数名后面括号内的表达式称为形式参数(简称“形参”),被调用函数名后面括号中的表达式称为实际参数(简称:实参),实参和形参需要按顺序对应传递数据。如果函数没有参数列表,则函数执行的任务就是固定的,用户在调用函数时不能改变函数内部的一些执行行为。例如:前面介绍的 table()函数就是没有参数列表函数,每次调用 table()函数时都会输出固定的表格,用户连最基本的表名,表的行数和列数都不能改变。


如果函数使用参数列表,函数参数的具体数值就会从函数外部获得。也就是用户在调用函数时,在函数体没有执行之前,将一些数据通过函数的参数列表传递到函数内部,这样函数在执行函数体时,就可以根据用户传递过来的数据决定函数体内部如何执行。所以说,函数的参数列表就是给用户调用函数时提供的操作接口。


通过实际栗子分析


举个例子,工厂生产螺丝,螺丝有不同型号,不同型号代表不同形状以及不同尺寸,这时如果每个不同型号的螺丝都需要单独的机器去生产,如果生产螺丝的型号很多,那得需要多少台机器,得多大厂房才能装得下这些机器,如果这时候有一台机器能够通过调整参数生产不同型号的螺丝,是不是就会节省很多成本,这才是符合我们想法的基本操作。或者就像你去奶茶店,可以选择大杯,中杯,小杯一样,你可以自由选择,这些数据由用户传入,再比如超市收银,收银员会扫条码识别这是什么商品,具体多少钱,这些都需要用户来传入数据作为参数,去生产符合要求的产品或者计算符合需求的结果,通过传入参数来控制系统,这样使用起来更灵活。不可能说为不同产品单独做一个系统吧,万一遇上想降价促销的时候或者上架新品的时候,还得专门去找人开发一台新的收银机系统来适应新的需求,这显然不符合我们现实的操作逻辑。这样还不如计算器好使。再比如我们在地铁站的售票机购买地铁票,我们先选择起点和终点站,系统就会根据我们的选择,计算票价。你放入指定面额的纸币或者硬币,等到你的所付金额等于或超过票价时,系统自动出票,如果所付金额超过票价,机器将会自动给你找零。如果你突然不想坐车了,这时候如果你的操作还没完成,还可以终止操作退出系统,如果付了部分金额,机器会退回已付金额。这里起始站点和终点站,以及你所付的钱都是由你来决定的,由你输入,这就是函数参数最完美的地方,增加了代码的可复用性以及操作的灵活性,我们写代码的时候,只需要写一个函数就能适应多种情况。如果上面的例子还不是很明白,那下面通过代码来继续了解。


编程实践

我们在前面写过计算数字 1-100 的和,我们之前在代码写死了的,如果这时候我们想计算数字 1-1000 的和,怎么办?我们看看代码怎么写:

<?phpfunction sum($number){	$sum = 0;	for($i=1;$i<=$number;$i++){		$sum += $i;	}	return $sum;}

?>
复制代码

在定义函数 sum()时,添加了 1 个形参这个参数就是最大数,比如 1-100,就是 100;需要一个整型数值。这里调用带参数列表的 sum()函数,如下所示:

<?phpecho "计算结果如下:<br>";echo sum(100);?>
复制代码

该程序执行后输出结果如下图:


在函数中使用的参数列表,是用户调用函数时传递数据到函数内部的接口。可以根据声明函数是需要设置多个参数,上例中已经设置了 1 个参数,用来在调用时改变参数来计算累计到哪个数为止。如果还想让用户调用 sum()函数,可以改变初始值,比如现在不想从 1 开始计算,我想自定义初始参数,只要在声明函数时,在参数列表中多设置 1 个参数即可。

代码如下:

<?phpfunction 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,'天河客运站', '体育西路');
复制代码

执行结果:


发布于: 刚刚阅读数: 4
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020-06-18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
【web 开发基础】通过模拟地铁售票系统介绍PHP 自定义函数之函数的参数-PHP 快速入门 (26)_记录函数参数和返回值_迷彩_InfoQ写作社区