Quay lại

Tính Năng Mới Đáng Chú Ý Trong PHP 8.2 Chuyên mục PHP và Laravel    2024-05-25    15 Lượt xem    12 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Tính Năng Mới Đáng Chú Ý Trong PHP 8.2

Phiên bản mới nhất của PHP, PHP 8.2, sắp được phát hành. Chính xác là vào ngày 8 tháng 12 năm 2022.

Trong bài viết này, mình sẽ liệt kê tất cả các tính năng mới sẽ được giới thiệu trong PHP 8.2. Trong bài viết này mình sẽ không đề cập đến các cải tiến và sửa lỗi đi kèm với PHP 8.2 mà mình chỉ đề cập đến những tính năng mà mình cho là đáng chú ý. Vậy hãy bắt đầu nào.

Readonly Classes

Readonly classes chỉ là các lớp thông thường được thêm vào từ khóa readonly. Tính năng này phù hợp với các thuộc tính chỉ đọc (readonly properties) được giới thiệu trong PHP 8.1.

readonly class Book 
{
    public function __construct(
        public string $author,
        public string $title,
    ) {}
}

$book = new Book('s2sontech', 'tech');

$book->author = 's3sontech';
// Lỗi: Không thể sửa đổi thuộc tính chỉ đọc Book::$author

The true type

Kiểu true là một kiểu mới có thể được sử dụng để chỉ định rằng một biến chỉ có thể được gán giá trị boolean là true.

function enableFeature(true $feature): true
{
    // do something

    return true;
}

enableFeature(false);

// Lỗi:  Uncaught TypeError: enableFeature(): 
// Đối số #1 ($feature) phải thuộc kiểu true, bool được đưa ra

Kiểu false và null

Kiểu falsenull là các kiểu mới có thể được sử dụng để chỉ định rằng một biến chỉ có thể được gán một giá trị boolean là false hoặc null tương ứng.

function disableFeature(false $feature): true
{
    // do something

    return true;
}

disableFeature(true);
// Lỗi:  Uncaught TypeError: disableFeature(): 
// Đối số #1 ($feature) phải là kiểu false, bool được đưa ra​

Và dưới đây là một ví dụ về kiểu null:

class Nil
{
    public null $nil = null;
 
    public function isNull(null $nil): true 
    { 
        /* ... */ 

        return true;
    }
}

$nil = new Nil();
$nil->isNull(true);

// Lỗi:  Uncaught TypeError: Nil::isNull(): 
// Đối số #1 ($nil) phải là kiểu null, bool được đưa ra​

Sử dụng hằng số trong traits

Sử dụng hằng số trong traits PHP 8.2 sẽ cho phép bạn sử dụng hằng số trong traits. Điều này có nghĩa là bạn có thể định nghĩa hằng số trong traits, và chúng có thể được sử dụng trong các Class sử dụng trait cũng như trong trait chính.

trait PersonTrait
{
    public const MIN_AGE = 18;

    public function isAdult(): bool
    {
        return $this->age >= self::MIN_AGE;
    }
}

class Person
{
    use PersonTrait;

    private int $age;

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

echo Person::MIN_AGE;
// Output: 18

$person = new Person(20);

echo $person->isAdult();
// Output: true​

Kiểu Disjunctive Normal Form (DNF)

Kiểu Disjunctive Normal Form (DNF) PHP 8.2 sẽ giới thiệu một kiểu mới được gọi là DNF (Disjunctive Normal Form). Kiểu này là sự kết hợp của các toán tử |&. Nó cho phép bạn chỉ định một kiểu là sự hợp của hai hoặc nhiều kiểu khác nhau, và mỗi kiểu đó là giao của một hoặc nhiều kiểu khác.

interface User
{
    public function getName(): string;
}

interface Admin
{
    public function getName(): string;
}

interface SuperAdmin
{
    public function getName(): string;
}

function fetchUserName((Admin&SuperAdmin)|User $user): string
{
    return $user->getName();
}

$user = new class implements Admin {
    public function getName(): string
    {
        return 'User';
    }
};

fetchUserName($user);
// Lỗi:  Uncaught TypeError: fetchUserName(): 
// Đối số #1 ($user) phải thuộc kiểu (Admin&SuperAdmin)|User

Phần mở rộng Ngẫu nhiên Mới PHP 8.2 sẽ giới thiệu một  random API mới sẽ thay thế các hàm mt_rand()rand() hiện tại. API mới sẽ dựa trên một lớp Randomizer duy nhất cung cấp các phương thức ngẫu nhiên khác nhau (như get int/bytes, shuffle string/arrays).

$is_production = false;
$rng = $is_production
    ? new Random\Engine\Secure()
    : new Random\Engine\PCG64(1234);
 
$randomizer = new Random\Randomizer($rng);
$randomizer->shuffleString('jhondoe');

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday