PHP嚴格類型檢查模式


前言

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

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM