PHP 版本 7 还将标量类型声明功能扩展到函数的返回值。根据这个新规定,返回类型声明指定了函数应返回的值的类型。我们可以为返回类型声明以下类型 -
- int
- float
- bool
- string
- interfaces
- array
- callable
为了实现返回类型声明,函数定义为 -
function myfunction(type $par1, type $param2): type {
# 函数体
return $val;
}
PHP 解析器默认是强制类型化。您需要声明 “strict_types=1” 以强制对要使用定义中使用的类型返回的变量类型进行更严格的验证。
例子
在下面的示例中,division() 函数定义为返回类型为 int。
<?php
function division(int $x, int $y): int {
$z = $x/$y;
return $z;
}
$x=20.5;
$y=10;
echo "First number: " . $x;
echo "\nSecond number: " . $y;
echo "\nDivision: " . division($x, $y);
?>
由于类型检查尚未设置为 strict_types=1,因此即使其中一个参数是非整数,也会进行除法。
First number: 20.5
Second number: 10
Division: 2
Second number: 10
Division: 2
但是,一旦您在脚本顶部添加 strict_types 的声明,程序就会引发一条致命错误消息。
Fatal error: Uncaught TypeError: division(): Argument #1 ($x) must be of type int, float given, called in div.php on line 12 and defined in div.php:3
Stack trace:
#0 div.php(12): division(20.5, 10)
#1 {main}
thrown in div.php on line 3
VS Code 甚至在运行代码之前就通过在错误位置显示错误行来警告错误 -

例子
要使 division() 函数返回 float 而不是 int,请将分子转换为 float,并查看 PHP 如何引发致命错误 -
<?php
// 声明(strict_types=1);
function division(int $x, int $y): int {
$z = (float)$x/$y;
return $z;
}
$x=20;
$y=10;
echo "First number: " . $x;
echo "\nSecond number: " . $y;
echo "\nDivision: " . division($x, $y);
?>
取消对顶部的 declare 语句的注释,并在此处运行此代码以检查其输出。它将显示一个错误 -
First number: 20
Second number: 10PHP Fatal error: Uncaught TypeError: division(): Return value must be of type int, float returned in /home/cg/root/14246/main.php:5
Stack trace:
#0 /home/cg/root/14246/main.php(13): division()
#1 {main}
thrown in /home/cg/root/14246/main.php on line 5
Second number: 10PHP Fatal error: Uncaught TypeError: division(): Return value must be of type int, float returned in /home/cg/root/14246/main.php:5
Stack trace:
#0 /home/cg/root/14246/main.php(13): division()
#1 {main}
thrown in /home/cg/root/14246/main.php on line 5

