类型声明
类型声明允许函数在调用时要求参数为特定类型。
如果给出的值类型不对,那么将会产生一个错误:
1. 在PHP 5中,这将是一个可恢复的致命错误
2. 在PHP 7中将会抛出一个TypeError异常。
为了指定一个类型声明,类型应该加到参数名前。
这个声明可以通过将参数的默认值设为NULL来实现允许传递NULL。
<?php
function test(boolean $param) {}
test(true);
?>
输出:
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1
如何修改正确呢?
1.将boolean调成bool
2.将php调至7.1版本
严格类型
默认情况下,如果能做到的话,
PHP将会强迫错误类型的值转为函数期望的标量类型。
例如,一个函数的一个参数期望是string,但传入的是integer,
最终函数得到的将会是一个string类型的值。
可以基于每一个文件开启严格模式。
在严格模式中,只有一个与类型声明完全相符的变量才会被接受,
否则将会抛出一个TypeError。
唯一的一个例外是可以将integer传给一个期望float的函数。
使用 declare 语句和strict_types 声明来启用严格模式:
<?php
declare(strict_types=1);
function sum(int $a, int $b) {
return $a + $b;
}
var_dump(sum(1, 2));
var_dump(sum(1.5, 2.5));
?>
输出
int(3)
Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 9 and defined in -:4
Stack trace:
#0 -(9): sum(1.5, 2.5)
#1 {main}
thrown in - on line 4
返回值类型声明
PHP 7 增加了对返回值类型声明的支持。
就如 类型声明一样, 返回值类型声明将指定该函数返回值的类型。
同样,返回值类型声明也与 有效类型 中可用的参数类型声明一致。
严格类型 也会影响返回值类型声明。
在默认的弱模式中,如果返回值与返回值的类型不一致,则会被强制转换为返回值声明的类型。
在强模式中,返回值的类型必须正确,否则将会抛出一个TypeError异常。
<?php
function sum($a, $b): float {
return $a + $b;
}
// Note that a float will be returned.
var_dump(sum(1, 2));
?>
以上例程会输出:
float(3)