PHP 標量類型與傳回值類型聲明

標量類型宣告

預設情況下,所有的PHP檔案都處於弱型別校驗模式。

PHP 7 增加了標量類型宣告的特性,標量類型宣告有兩種模式:

強制模式(預設)

##嚴格模式

標量類型聲明語法格式:

declare(strict_types=1);

代碼中透過指定strict_types的值(1或0),1表示嚴格型別校驗模式,作用於函數呼叫與傳回語句;0表示弱型別校驗模式。

declare(strict_types=1)必須是檔案的第一個語句。如果這個語句出現在檔案的其他地方,將會產生一個編譯錯誤,區塊模式是被明確禁止的。

strict_types指令影響指定使用的文件,不會影響被它包含(透過include等方式)進來的其他文件。該指令在運行時編譯,不能修改。它的運作方式,是在opcode中設定一個標誌位,讓函數呼叫和傳回類型檢查符合類型約束。

可以使用的型別參數有:

int

#float

bool

string

interfaces

array

## callable

強制模式實例#實例

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

以上程式執行輸出結果為:

9


實例匯總將參數4.1 轉換為整數4 後再相加。

嚴格模式實例實例

<?php 
// 严格模式 
declare(strict_types=1); 
function sum(int ...$ints) 
{ 
   return array_sum($ints); 
} 
print(sum(2, '3', 4.1)); 
?>

以上程式由於採用了嚴格模式,所以如果參數中出現不適整數的型別會報錯,執行輸出結果為:

PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……


傳回類型宣告PHP 7 增加了對傳回型別宣告的支持,傳回型別宣告指明了函數傳回值的類型。

可以宣告的回傳型別有:

int

#float

##bool

string

interfaces

array

## callable

傳回型別宣告實例

實例中,要求傳回結果為整數:實例

<?php 
declare(strict_types=1); 
function returnIntValue(int $value): int 
{ 
   return $value; 
} 
print(returnIntValue(5)); 
?>

以上程式執行輸出結果為:

5

#傳回型別宣告錯誤實例##實例

<?php 
declare(strict_types=1); 
function returnIntValue(int $value): int 
{ 
   return $value + 1.0; 
} 
print(returnIntValue(5)); 
?>

以上程式由於採用了嚴格模式,回傳值必須是int,但是計算結果是float,所以會報錯,執行輸出結果為:

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...


繼續學習
||
<?php // 强制模式 function sum(int $ints) { return array_sum($ints); } print(sum(2, '3', 4.1)); ?>