PHP7 初探

PHP7 初探

PHP7 初探。

這邊主要介紹幾個PHP的新功能,參考Laracast所作的筆記。

概述

主要介紹功能如下:

  1. Scalar Typehints : 定義函式的輸入型別。

  2. Return Type Declarations:定義函式的回傳型別。

  3. Spacehips:用來比較前後值(<=>)。

  4. The Null Coalesce operator:用來縮減三元運算式的方法。

  5. Grouped imports:用來群集(Group)引入(Import)的資料。

  6. Anonymous Class:除了匿名函式外有匿名類別。

1. Scalar Typehints

我們終於可以在function 內定義變數的型別。例如

function setAge(int $age){
    var_dump($age);
}
setAge('somestring'); //error
setAge(30); //int(30)
setAge('30'); //int(30)(會自動轉換)

function setIsValid(bool $valid){
    var_dump($valid);
}

setISValid('true'); //true
setIsValid('123'); //true
setIsValid(0); //false

如果想要強制地確認型別可以宣告

declare(strict_types = 1);

setAge('30'); //error
setAge(30); //int(30);

2. Return Type Declarations

可以定義funtcion回傳的型別,只需在括弧內加入: type例如

class User{
    
}

function getUser() : User {
    return [];
}
var_dump(getUser()); //error

function getUser() : User {
    return new User;
} 
var_dump(getUser()); //object(User){}

3. Spacehips

Spacehips(<=>)是一個用來比較排序的標示符號。用法如下

$names = ['Jason', 'George', 'Alan', 'Bob'];

usort($names, function ($a, $b){
   echo 'a:'.$a.'b:'.$b;
   return $a <=> $b;  
});
// 若$a < $b 回傳-1
// 若$a = $b 回傳 0
// 若$a > $b 回傳 1

var_dump($names);
//['Alan', 'Bob', 'George', 'Jason'];

usort($names, function ($a, $b){
   return $b <=> $a;  
});
// 若$b < $a 回傳-1
// 若$b = $a 回傳 0
// 若$b > $a 回傳 1
var_dump($names);
//['Jason', 'George', 'Bob', 'Alan'];

4. The Null Coalesce operator

我們會遇到以下問題[若A存在, 其值為B,反之則為C]的狀態,以往的縮寫方式都會以[三元表達式]為主isset(A) ? A : B,在PHP7可以用更簡單的方式處理A ?? B

$name = isset($_GET['name']) ? $_GET['name'] : 'nothing'
$name = $_GET['name'] ?? 'nothing';

5. Grouped Imports

以往我們在用Controller時常會引入不同的class,若有相同的namespace在PHP7可以Group起來

//php 5
use App\Person;
use App\Animal;
//php 7
use App\{Person, Animal};

6.Anonymous Classes

除了匿名函式外,在PHP7也支援匿名類別

class Hotel{
    protected $room;
    function setRoom(Room $room){
        $this->room = $room
    }
}
//php5
$hotel = new Hotel;
$hotel->setRoom(new Room)
//php7
$hotel->setRoom(new class {
    function ...
})