5.1 函数
函数的英文为function,这个词也是功能的意思。顾名思义,使用函数就是要在编程过程中实现一定的功能,即通过代码块来实现特定的功能。例如,通过一定的功能记录下酒店客人的个人信息,每到他生日的时候自动给他发送祝贺E-mail,并且这个发信“功能”可以重用,改在某个客户的结婚纪念日时给他发送祝福email。
5.1.1 PHP函数
其实在前面的实例中早已用过函数。define()函数就是定义一个常量。
其实,更多的情况下,程序员面对的是自定义函数。其结构如下:
function name_of_function( param1,param2,… ){ statement }
其中name_of_function是函数名,param1、param2是参数,statement是函数的具体内容。
5.1.2 定义和调用函数
下面以定义和调用函数为例进行讲解。本实例主要实现酒店欢迎页面。
【例5.1】(实例文件:ch05\5.1.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php function sayhello($customer){ return $customer.", 欢迎您来到GoodHome酒店。"; } echo sayhello('张先生'); ?> </BODY> </HTML>
本程序运行结果如图5-1所示。
【案例分析】
此函数的返回值是通过值返回的。也就是说return语句返回值时,创建了一个值的副本,并把它返回给使用此函数的命令或函数,在这里是echo命令。
5.1.3 向函数传递参数数值
由于函数是一段封闭的程序。很多时候,程序员都需要向函数内传递一些数据来进行操作。
function 函数名称(参数1,参数2){ 算法描述,其中使用参数1和参数2; }
下面以酒店房间住宿费总价为例进行讲解。
【例5.2】(实例文件:ch05\5.2.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php function totalneedtopay($days,$roomprice){ $totalcost = $days*$roomprice; "需要支付的总价:$totalcost"."元。"; } $rentdays = 3; $roomprice = 168; totalneedtopay($rentdays,$roomprice); totalneedtopay(5,198); ?> </BODY> </HTML>
运行结果如图5-2所示。
【案例分析】
(1)以这种方式传递参数数值的方法就是向函数传递参数数值。
(2)其中function totalneedtopay($days,$roomprice){}定义了函数和参数。
(3)不管是通过变量$rentdays和$roomprice向函数内传递参数数值,还是像totalneedtopay (5,198)这样直接在传递参数数值都是一样的。
5.1.4 向函数传递参数引用
向函数传递参数引用,其实就是向函数传递变量引用。参数引用一定是变量引用,静态数值是没有引用一说的。由于在变量引用中已经知道,变量引用其实就是对变量名的使用,是对特定的一个变量位置的使用。
下面仍然以酒店服务费总价为例进行讲解。
【例5.3】(实例文件:ch05\5.3.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php $fee = 300; $serviceprice = 50; function totalfee(&$fee,$serviceprice){ $fee = $fee+$serviceprice; echo "需要支付的总价:$fee"."元。"; } totalfee($fee,$serviceprice); totalfee($fee,$serviceprice); ?> </BODY> </HTML>
运行结果如图5-3所示。
【案例分析】
(1)以这种方式传递参数数值的方法就是向函数传递参数引用。使用“&”符号表示参数引用。
(2)其中function totalfee(&$fee,$serviceprice){}定义了函数、参数和参数引用。变量$fee是以参数引用的方式进入函数的。当函数的运行结果改变了变量$fee的引用的时候,在函数外的变量$fee的值也发生了改变。也就是函数改变了外部变量的值。
5.1.5 从函数中返回值
以上的一些例子中,都是把函数运算完成的值直接打印出来。但是,很多情况下,程序并不需要直接把结果打印出来,而是仅仅给出结果,并且把结果传递给调用这个函数的程序,为其所用。
这里需要使用到return关键字。下面以综合酒店客房价格和服务价格为例进行讲解。
【例5.4】(实例文件:ch05\5.4.php)
<HTML> <HEAD><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></HEAD> <BODY> <?php function totalneedtopay($days,$roomprice){ return $days*$roomprice; } $rentdays = 3; $roomprice = 168; echo totalneedtopay($rentdays,$roomprice); ?> </BODY> </HTML>
运行结果如图5-4所示。
【案例分析】
(1)在函数function totalneedtopay($days,$roomprice)的算法中,直接使用return把运算的值返回给调用此函数的程序。
(2)其中echo totalneedtopay($rentdays,$roomprice);语句调用了此函数,totalneedtopay()把运算值返回给了echo语句才有上面的显示。当然这里也可以不用echo来处理返回值,也可以对它进行其他处理,如赋值给变量等。
5.1.6 对函数的引用
不管是PHP中的内置函数,还是自定义函数,都可以直接通过函数名调用。但是在操作过程中也有些不同,大致分为以下3种情况。
(1)如果是PHP的内置函数,如date(),可以直接调。
(2)如果这个函数是PHP的某个库文件中函数,则需要用include()或require()命令把此库文件加载,然后才能使用。
(3)如果是自定义函数,且与引用程序同在一个文件中,则可直接引用。如果此函数不在当前文件内,则需要用include()或require()命令加载。