前言
在定义函数时,函数名后面括号中的参数列表是用户在调用函数时用来将数据传递到函数内部的接口,而函数的返回值则将函数执行后的结果返回给调用者。如果函数没有返回值,就只能算一个执行过程。只依靠函数做一些事情还不够,有时更需要在程序脚本中使用函数执行后的结果。由于变量的作用域的差异,调用函数的脚本程序不能直接使用函数体里面的信息,但可以通过关键字return向调用者传递数据。return语句在函数体中使用时,有以下两个作用:
- return语句可以向函数调用者返回在函数体中任意确定的值。
- 将程序控制权返回到调用者的作用域,即退出函数。在函数体中如果执行了return语句,它后面的语句就不会被执行
语法
语法如下:
<?php
return 返回值;//一个确定的值
?>
编程实践
在上一篇文章《【web 开发基础】通过模拟地铁售票系统介绍 PHP 自定义函数之函数的参数 -PHP 快速入门 (26)》中我们写了一个模拟地铁售票系统的程序,代码如下:
<?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,'天河客运站', '体育西路');
在上面的例子中,我们在售票函数saleTickets($line,$originating, $terminus)中调用了支付函数pay(),在支付函数中们是直接输出支付的结果,而不是返回结果。如果我们需要在售票函数saleTickets($line,$originating, $terminus)中需要pay()返回一个值,并在售票函数中使用到,比如返回支付成功的编码code以及提示信息等等,然后通过返回的信息判断支付的具体情况,这时候我们就需要使用到return返回一个值,以供调用函数来使用。修改pay()函数代码如下:
<?php
function pay($yourPay, $ticketPrice){
if($yourPay>$ticketPrice){
return array(
'code' => '0',
'msg'=> "支付成功,正在找零....找回金额为:". ($yourPay-$ticketPrice);
)
}
elseif($yourPay<$ticketPrice){
return array(
'code' => '1',
'msg'=> "请继续支付....已放入金额为:". ($ticketPrice-$yourPay)
)
}else{
return array(
'code' => '2',
'msg'=> "支付成功,正在出票..."
)
}
}
?>
在上述代码中,由于PHP中return一次智能返回一个值,当我们需要返回多个值时,我们可以把所以值放到一个数组中进行返回。这样我们就可以从在其他函数中判断调用的其他服务是否成功,再进行接下来的操作,这样更符合我们的实际需求。
调用如下:
<?php
function saleTickets($line,$originating, $terminus){
//.....
$returnData = pay($yourPay, $station[$line][$originating . "-" . $terminus]);
}
?>
在上面的例子中,当saleTickets()调用pay()时,不仅可以将一些数据以参数的形式传递到函数的内部,还执行了函数,并且在调用函数处还可以使用return语句返回的值,而且这个从函数返回的值可以在脚本中像使用其他值一样使用,比如:将返回值赋值给一个变量、直接输出或是参与运算等。
总结
通常在函数中使用return语句可以很容易的返回一个值。如果需要返回多个值,则不能采用连续写多个return语句的方式。因为函数执行到第一个return语句就会退出,不会执行其后面的任何代码,但是可以将多个值添加一个数组中,在使用return返回这个数组,在调用函数时就可以接收到这个数组,并在程序中像使用其他数组一样。