在上述例子中,都是把函数运算完成的值直接打印出来。但是,很多情况下,程序并不需要直接把结果打印出来,而是仅仅给出结果,并且把结果传递给调用这个函数的程序,为其所用,这里需要用到return关键字。
下面以综合酒店客房价格和服务价格为例进行讲解。
【例4.5】
<?php
function totalneedtopay($days,$roomprice){// 声明自定义函数
return $days*$roomprice; // 返回酒店消费总价格
}
$rentdays = 3;
$roomprice = 168;
echo totalneedtopay($rentdays,$roomprice);
?>
运行结果如图4-5所示。
【案例分析】
(1)在函数function totalneedtopay($days,$roomprice)算法中,直接使用return把运算的值返回给调用此函数的程序。
(2)其中,echo totalneedtopay($rentdays,$roomprice);语句调用了此函数,totalneedtopay()把运算值返回给了echo语句,才有了上面的显示。当然这里也可以不用echo来处理返回值,也可以对它进行其他处理,比如赋值给变量等。
4.2.5 对函数的引用
无论是PHP中的内置函数,还是程序员在程序中自定义的函数,都可以简单地通过函数名调用。但是操作过程也有些不同,大致分为以下3种情况。
·如果是PHP的内置函数,如date(),可以直接调用。
·如果这个函数是PHP的某个库文件中的函数,就需要用include()或require()命令把此库文件加载,然后才能使用。
·如果是自定义函数,与引用程序在同一个文件中,就可以直接引用。如果此函数不在当前文件内,就需要用include()或require()命令加载。
对函数的引用实际上是对函数返回值的引用。
【例4.6】
<?php
function &example($aa=1){ //定义一个函数,别忘了加“&”符号
return $aa; //返回参数$aa
}
$bb= &example("引用函数的实例"); //声明一个函数的引用$bb
echo $bb. "<br/>";
?>
运行结果如图4-6所示。
【案例分析】
(1)本实例首先定义一个函数,然后变量$bb将引用函数,最后输出变量$bb,它实际上是$aa的值。(2)和参数传递不同,在定义函数和引用函数时,都必须使用“&”符号,表明返回的是一个引用。
4.2.6 对函数取消引用
对于不需要引用的函数,可以做取消操作。取消引用使用unset()函数来完成,目的是断开变量名和变量内容之间的绑定,此时并没有销毁变量内容。
【例4.7】
<?php
$num = 166; //声明一个整型变量
$math = &$num; //声明一个对变量$num的引用$math
echo "\$math is: ".$math."<br/>"; //输出引用$math
unset($math); //取消引用$math
echo "\$num is: ".$num; //输出原变量
?>
运行结果如图4-7所示。
本程序首先声明一个变量和变量的引用,输出引用后取消引用,再次调用原变量。从图4-7可以看出,取消引用后对原变量没有任何影响。
4.3 声明函数返回值的类型
在PHP中,用户可以声明函数返回值的类型。可以声明的返回类型包括int、float、bool、string、interfaces、array和callable。
下面通过案例来学习PHP如何声明函数返回值的类型。
【例4.8】
<?php
declare(strict_types=1);
function returnIntValue(int $value): int
{
return $value;
}
print(returnIntValue(60));
?>
以上程序执行结果如图4-8所示。
4.4 intdiv()函数
在PHP中,整除函数intdiv()的语法格式如下:
intdiv(a, b);
该函数返回值为a除以b的值并取整。
【例4.9】
<?php
echo intdiv(16, 3)."<br/>";
echo intdiv(10, 3) ."<br/>";
echo intdiv(8, 16) ."<br/>";
?>
本程序运行结果如图4-9所示。
4.5 括号在变量或函数中变化
在PHP中,用括号把变量或者函数括起来将不再起作用。
【例4.10】
<?php
function getArray()
{
return [100, 200, 300,400];
}
$last = array_pop(getArray());
//所有版本的PHP在这里将会报错
$last = array_pop((getArray()));
//PHP5或者更早的版本将不会报错
?>
注意第二句的调用是用圆括号包了起来,但还是报这个严格错误,如图4-10所示。
PHP 7之前的版本是不会报第2个错误的。例如,在PHP 5中的运行结果如图4-11所示。