PHP7 新特徵

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 ?>

程序執行輸出結果爲
運算符
運算符
運算符

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
}
?>
相關文章
相關標籤/搜索