前言
PHP默認情況下是弱類型校驗模式,在php7下declare新增了strict_types指令,通過設置strict_types的值(1或者0),1表示嚴格類型校驗模式,作用於函數調用和返回語句;0表示弱類型校驗模式。
嚴格類型檢查模式猜測是為php8的jit做好鋪墊.
注意:declare(strict_types=1)必須是文件的第一個語句。如果這個語句出現在文件的其他地方,將會產生一個編譯錯誤,塊模式是被明確禁止的。
示例
- 沒開啟嚴格類型檢查模式
<?php
/*
* 輸入數字 傳出數字
*/
function test(int $num): int
{
return $num;
}
echo test(1); // 1
echo test(false); // 0
可以看出定義傳入參數必須是int類型,傳入false竟然沒報錯,但是坑爹的是php竟然自動進行了類型裝換.這種就是隱形的BUG!!
- 開啟嚴格類型檢查模式
<?php
declare(strict_types=1);//必須為第一個語句
function test(int $num): int
{
return $num;
}
echo test(false);
//此時會報錯,參數必須為整型
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be of the type integer, boolean given