PHP 變量類型與返回值類型聲明
標量類聲明
默認情況下,所有的PHP文件都處於弱類型校驗模式
PHP增加了標量類型聲明的特征,標量類型聲明有兩種模:
強制模式
嚴格模式
標量類型聲明語法格式:
declare(strict_types=1);
代碼中通過制定strict_types的值(1或者0),1表示嚴格類型效驗模式,作用於函數調用和返回語句;0表示弱列席效驗模式。
可以使用的類型參數有:
int float bool string interfaces array callable
強制模式例如:
1 <?php 2 3 //強制模式 4 5 function sum(int ....$ints){ 6 7 return array_sum($ints); 8 9 } 10 11 print(sum(2,'3',4.1)); 12 13 ?>
程序輸出結果為9;
例子將參數4.1轉為整數4后再想加;
嚴格模式例如:
1 <?php 2 3 //嚴格模式 4 5 declare(strice_types=1); 6 7 function sum(int ....$ints){ 8 9 return array_sum$ints); 10 11 } 12 13 print(sum(2,'3',4.1); 14 15 ?>
程序采用了嚴格模式,所以參數中出現了不合適整數的類型就會報錯,執行出結果為:
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 NULL 合並運算符
PHP 7 新增加的 NULL 合並運算符(??)是用於執行isset()檢測的三元運算的快捷方式。
NULL 合並運算符會判斷變量是否存在且值不為NULL,如果是,它就會返回自身的值,否則返回它的第二個操作數。
以前我們這樣寫三元運算符:
1 <?php 2 // 獲取 $_GET['site'] 的值,如果不存在返回 '運算符' 3 $site = $_GET['site'] ?? '運算符'; 4 5 print($site); 6 print(PHP_EOL); // PHP_EOL 為換行符 7 8 9 // 以上代碼等價於 10 $site = isset($_GET['site']) ? $_GET['site'] : '運算符'; 11 12 print($site); 13 print(PHP_EOL); 14 15 $site = $_GET['site'] ?? $_POST['site'] ?? '運算符'; 16 17 print($site); 18 ?>
程序執行輸出結果為
運算符
運算符
運算符
Void 函數
在PHP 7 中引入的其他返回值類型的基礎上,一個新的返回值類型void被引入。 返回值聲明為 void 類型的方法要么干脆省去 return 語句,要么使用一個空的 return 語句。 對於 void 函數來說,null 不是一個合法的返回值。
<?php function swap(&$left, &$right) : void { if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp; } $a = 1; $b = 2; var_dump(swap($a, $b), $a, $b); ?>
程序運行結果為
null
int(2)
int(1)
list()現在支持鍵名
list()支持在它內部去指定鍵名。這意味着它可以將任意類型的數組 都賦值給一些變量(與短數組語法類似)
<?php $data = [ ['id' => 1, 'name' => 'Tom'], ['id' => 2, 'name' => 'Fred'], ]; while (list('id' => $id, 'name' => $name) = $data) { // logic here with $id and $name } ?>