PHP 標量類型與返回值類型聲明
標量類型聲明
默認情況下,所有的PHP文件都處于弱類型校驗模式。
PHP 7 增加了標量類型聲明的特性,標量類型聲明有兩種模式:
強制模式 (默認)
嚴格模式
標量類型聲明語法格式:
declare(strict_types=1);
代碼中通過指定 strict_types的值(1或者0),1表示嚴格類型校驗模式,作用于函數(shù)調(diào)用和返回語句;0表示弱類型校驗模式。
declare(strict_types=1)必須是文件的第一個語句。如果這個語句出現(xiàn)在文件的其他地方,將會產(chǎn)生一個編譯錯誤,塊模式是被明確禁止的。
strict_types指令影響指定使用的文件,不會影響被它包含(通過include等方式)進來的其他文件。該指令在運行時編譯,不能修改。它的運作方式,是在opcode中設置一個標志位,讓函數(shù)調(diào)用和返回類型檢查符合類型約束。
可以使用的類型參數(shù)有:
int
float
bool
string
interfaces
array
callable
強制模式實例
實例
<?php // 強制模式 function sum(int ...$ints) { return array_sum($ints); } print(sum(2, '3', 4.1)); ?>
以上程序執(zhí)行輸出結(jié)果為:
9
實例匯總將參數(shù) 4.1 轉(zhuǎn)換為整數(shù) 4 后再相加。
嚴格模式實例
實例
<?php // 嚴格模式 declare(strict_types=1); function sum(int ...$ints) { return array_sum($ints); } print(sum(2, '3', 4.1)); ?>
以上程序由于采用了嚴格模式,所以如果參數(shù)中出現(xiàn)不適整數(shù)的類型會報錯,執(zhí)行輸出結(jié)果為:
PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
返回類型聲明
PHP 7 增加了對返回類型聲明的支持,返回類型聲明指明了函數(shù)返回值的類型。
可以聲明的返回類型有:
int
float
bool
string
interfaces
array
callable
返回類型聲明實例
實例中,要求返回結(jié)果為整數(shù):
實例
<?php declare(strict_types=1); function returnIntValue(int $value): int { return $value; } print(returnIntValue(5)); ?>
以上程序執(zhí)行輸出結(jié)果為:
5
返回類型聲明錯誤實例
實例
<?php declare(strict_types=1); function returnIntValue(int $value): int { return $value + 1.0; } print(returnIntValue(5)); ?>
以上程序由于采用了嚴格模式,返回值必須是 int,但是計算結(jié)果是float,所以會報錯,執(zhí)行輸出結(jié)果為:
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...