PHP7功能之標(biāo)量類(lèi)型聲明

2020-07-16 09:25 更新

在 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)制模式:強(qiáng)制是默認(rèn)的模式,不需要指定。
  • 嚴(yán)格模式:嚴(yán)格的模式必須明確暗示。RFC 給每一個(gè) PHP 文件,添加一句新的可選指令(declare(strict_type=1);),讓同一個(gè) PHP 文件內(nèi)的全部函數(shù)調(diào)用和語(yǔ)句返回,都有一個(gè)“嚴(yán)格約束”的標(biāo)量類(lèi)型聲明檢查。

可以使用上述模式強(qiáng)制執(zhí)行以下類(lèi)型的函數(shù)參數(shù):

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

強(qiáng)制模式-示例

<?php
   // Coercive mode
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1));
?>

運(yùn)行上述代碼,它產(chǎn)生以下瀏覽器輸出:

9

嚴(yán)格模式-示例

<?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ì)接受,否則拒絕。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)