PHP 變量類型與返回值類型聲明php
標量類聲明數組
默認狀況下,全部的PHP文件都處於弱類型校驗模式函數
PHP增長了標量類型聲明的特徵,標量類型聲明有兩種模:spa
強制模式code
嚴格模式blog
標量類型聲明語法格式:string
declare(strict_types=1);it
代碼中經過制定strict_types的值(1或者0),1表示嚴格類型效驗模式,做用於函數調用和返回語句;0表示弱列席效驗模式。io
可使用的類型參數有:function
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 ?>
程序執行輸出結果爲
運算符
運算符
運算符
在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()支持在它內部去指定鍵名。這意味着它能夠將任意類型的數組 都賦值給一些變量(與短數組語法相似)
<?php $data = [ ['id' => 1, 'name' => 'Tom'], ['id' => 2, 'name' => 'Fred'], ]; while (list('id' => $id, 'name' => $name) = $data) { // logic here with $id and $name } ?>