在 PHP7 中為了提高執(zhí)行效率,引入了一個(gè)新的功能,即在函數(shù)方法中增加了 Scalar 類(lèi)型聲明(標(biāo)量類(lèi)型聲明),這樣做節(jié)省了對(duì)數(shù)據(jù)類(lèi)型的檢測(cè)。標(biāo)量類(lèi)型聲明有如下的兩個(gè)選項(xiàng):
可以使用上述模式強(qiáng)制執(zhí)行以下類(lèi)型的函數(shù)參數(shù):
<?php
// Coercive mode
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
運(yùn)行上述代碼,它產(chǎn)生以下瀏覽器輸出:
9
<?php
// Strict mode
declare(strict_types=1);
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
運(yùn)行上述代碼,它產(chǎn)生以下瀏覽器輸出:
PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in /soft/node/run.php on line 7 and defined in /soft/node/run.php:4 Stack trace: #0 /soft/node/run.php(7): sum(2, '3', 4.1) #1 {main} Next TypeError: Argument 3 passed to sum() must be of the type integer, float given, called in /soft/node/run.php on line 7 and defined in /soft/node/run.php:4 Stack trace: #0 /soft/node/run.php(7): sum(2, '3', 4.1) #1 {main} thrown in /soft/node/run.php on line 4
嚴(yán)格模式的校驗(yàn)行為:嚴(yán)格的類(lèi)型校驗(yàn)調(diào)用拓展或者 PHP 內(nèi)置函數(shù),會(huì)改變 zend_parse_parameters 的行為。特別注意,失敗的時(shí)候,它會(huì)產(chǎn)生E_RECOVERABLE_ERROR 而不是E_WARNING。嚴(yán)格類(lèi)型校驗(yàn)規(guī)則是非常直接的:只有當(dāng)類(lèi)型和指定類(lèi)型聲明匹配,它才會(huì)接受,否則拒絕。
更多建議: