What’s news in PHP7.1

1 minute read

Symmetric Array Destructuring

可以用來取代以往list 功能,例如

<?php

//php 7.0 以前
list($name, $phone) = ['John', '0900123123'];
var_dump($name, $phone); //John, 0900123123

//php 7.1
[$name, $phone] = ['John', '0900123123'];
var_dump($name, $phone); //John, 0900123123

如果index 為字串的情況下也可以使用,不過就要加上名稱,如

<?php

$array = ['name' => 'john', 'phone' => '0900123123'];

['name' => $name, 'phone' => $phone] = $array;

var_dump($name, $phone) //John, 0900123123

Nullable and Voids Type

在php7.0 之後加了一個很重要的功能,就是你可以加入Typehint 及return type,會讓程式及IDE可以幫你除錯。在7.1的時候更加入了 nullblevoid兩個 type。例如

<?php
class User {
    protected $age;
    
    protected function __construct($age)
    {
        $this->age = $age;
    }
    public function getAge() : number
    {
        return $this->age;  
    }
}

var_dump((new User(21))->getAge()); //21

若是沒有輸入數字,則會是null,可以用nullable的型態表示,或是用

<?php
class User {
    protected $age;

    public function getAge() : ?number
    {
  	    return $this->age;  
    }
}

var_dump((new User())->getAge()); //null

void 則是用在沒有回傳的情況,償傭在儲存方法,如

<?php

use App\Models\User;

class UserRepository {
	public function save(User $user, array $array) : void
	{
		$user->fill($array);
    $user->save();
	}
}

Multi-Catch Exception Handling

當使用try & catch時,若要對不同的exception做相同操作,則可以使用。例如

<?php

class ChargeRejected extends Exception {}
class NotEnoughBalance extends Exception {}

class Opal {
    private $balance;
    public function pay()
    {
        if($balance < 2){
            throw new NotEnoughFunds;
        }
    }
}

try{
    (new Opal())->pay() 
} catch(ChargeRejected | NotEnoughBalance $e) {
    var_dump('you need to top up your opal card');
}

Iterables

新增了一個interablepseudo-type。一般我們在迭代時,往往都會用array,如果用到laravel,可能多個collection,如果一個方法可以同時接受這兩個迭代的類型,則可以使用interable

<?php
function dumpAll(interable $items){
    foreach($items as $item){
        var_dump($item);
    }
}

class NewCollection implements InteratorAggregate
{
    protected $items;

    public function __construct($items)
    {
        $this->items = $items;
    }

    public function getInterator()
    {
        return new ArrayIterator($this->items);
    }
}
$array = ['one', 'two', 'three'];
$collection  = new NewCollcation($array);

dumpAll($array); // 'one', 'two', 'three'
dumpAll($collection); // 'one', 'two', 'three'

Let’s All~

Categories:

Updated: