Có gì mới trong phiên bản PHP 7.4

76

Ngày 28/12/2019 PHP 7.4 đã chính thức ra mắt để cải thiện và bổ sung thêm một số tính năng mới. Qua bài viết này các bạn cùng với mình hãy tìm hiểu xem phiên bản PHP 7.4 có gì mới nhé.

I. Những cập nhật nổi bật

Trong phiên bản PHP 7.4 lần này, có một số cập nhật nổi bật sau:

1.1 Cú pháp mới, viết code ngắn gọn hơn với arrow function

Nếu bạn từng biết tới khái niệm Arrow function trong Javascript thì nó cũng tương tự với PHP kể từ phiên bản 7.4 trở đi. Cú pháp của PHP arrow function được thể hiện thông qua ví dụ sau:

<?php

// Cách viết thường
$extended = function ($c) use ($callable, $factory) {
    return $callable($factory($c), $c);
};
 
// Viết với arrow function
$extended = fn($c) => $callable($factory($c), $c);

1.2 Cú pháp mới, gộp các phần tử mảng với toán tử “dấu 3 chấm”

PHP 7.4 cho phép bạn gộp các phần tử của mảng thông qua “toán tử trải rộng”, bạn có thể theo dõi qua ví dụ sau:

<?php

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

Một ví dụ khác với cách sử dụng trong nhiều trường hợp hơn.

<?php

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; // [1, 2, 3]
$arr3 = [0, ...$arr1]; // [0, 1, 2, 3];
$arr4 = array(...$arr1, ...$arr2, 111); // [1, 2, 3, 1, 2, 3, 111];
$arr5 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3];

function getArr() {
  return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; // ['a', 'b', 'c'];

$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c'];

function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}
$arr8 = [...arrGen()]; // [11, 12, 13, 14];

Lưu ý: “Toán tử trải rộng” này không thể sử dụng với mảng có key là string.

1.3 Cú pháp mới, khai báo kiểu dữ liệu cho thuộc tính của lớp

PHP ngày càng “nghiêm túc” hơn với kiểu dữ liệu. Từ phiên PHP 7.4 trở đi, bạn có thể khai báo kiểu dữ liệu cho thuộc tính của lớp, bạn có thể theo dõi qua ví dụ sau:

<?php

class User {
    public int $id;
    public string $name;
}

$user = new User;
$user->id = 'hello'; // sẽ throw exception
$user->name = true; // vẫn gán được, nhưng bị ép về kiểu string. Kết quả là 1

Với ví dụ trên, khi bạn gán giá trị cho $user->id, thì PHP sẽ tự động ép về kiểu integer, nếu không ép được PHP sẽ throw một exception. Điều này cũng tương tự với $user->name.

Một ví dụ khác với cách sử dụng phong phú hơn.

<?php

class User
{
    public int $id;
    public string $name;

    // Kiểu dữ liệu cũng có thể áp dụng với thuộc tính static
    public static string $instance;

    // Cho phép thuộc tính address nhận giá null hoặc là instance của lớp Address
    public ?Address $address = null;

    // Có thể khai báo kiểu dữ liệu cùng lúc cho nhiều thuộc tính
    public int $x, $y;

    // Cũng có thể sử dụng với từ khóa "var"
    var bool $flag;
}

II. Chi tiết cập nhật

Dưới đây là danh tất cả các tính năng được cập nhật trong phiên bản PHP 7.4 lần này dành cho những bạn muốn tìm hiểu chi tiết:

Một vài thông tin khác:


Tài liệu tham khảo: