PHP如何开启严格模式
目录
PHP开启严格模式
php 7开始支持严格类型,php 7 启用严格类型:代码文件头部加上declare(strict_types=1);
php中文文档的declare函数页面,还没更新,没有严格类型的介绍.然而英文文档是有介绍的.
所以尽量看英文文档吧,英文的才是第一手资料
学好英语是程序员的必备技能.
在PHP文档 函数参考 部分https://www.php.net/manual/zh/functions.arguments.php
底下 有关于严格类型的详细说明
什么是严格类型
严格类型
默认情况下,如果能做到的话,PHP将会强迫错误类型的值转为函数期望的标量类型。 例如,一个函数的一个参数期望是string,但传入的是integer,最终函数得到的将会是一个string类型的值。
可以基于每一个文件开启严格模式。在严格模式中,只有一个与类型声明完全相符的变量才会被接受,否则将会抛出一个TypeError。 唯一的一个例外是可以将integer传给一个期望float的函数。
如何使用严格类型
使用 declare 语句和strict_types 声明来启用严格模式:
启用严格模式同时也会影响返回值类型声明.
严格类型适用于在启用严格模式的文件内的函数调用,而不是在那个文件内声明的函数。 一个没有启用严格模式的文件内调用了一个在启用严格模式的文件中定义的函数,那么将会遵循调用者的偏好(弱类型),而这个值将会被转换。
严格类型仅用于标量类型声明,也正是因为如此,这需要PHP 7.0.0 或更新版本,因为标量类型声明也是在那个版本中添加的。
# 案例来自php文档 函数的参考 - 严格类型
<?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