post-image

PHP 8.0 có những tính năng gì mới?

Tổng quan

Mới đây php phiên bản 8.0 đã được chính thức phát hành, theo các chuyên gia thì php có khá nhiều công nghệ đột phá nhằm tăng tính liên kết và cải thiện tốc độ xử lý. Vậy chúng ta cùng nhau tìm hiểu xem php8.0 có gì khác mới mẻ.

Trích lời dẫn trên trang chủ PHP.net

PHP 8.0 là một phiên bản cập nhật lớn của PHP. Phiên bản này bao gồm rất nhiều tính năng mới, đồng thời tối ưu cách truyền tham số (có thể đặt tên khi truyền tham số), union types (một biến có thể thuộc một vài kiểu dữ liệu), attributes, constructor, biểu thức match (cú pháp mới, gần giống switch case), toán tử nullsafe (cho phép truy xuất giá trị null một cách an toàn), JIT (trình biên dịch mới, giúp PHP 8 đạt hiệu năng cao), và cải tiến các về type system, xử lý lỗi, và tính nhất quán.

Các tính năng mới.

Union types.

Với bản chất được định kiểu động của PHP, có rất nhiều trường hợp mà kiểu liên hợp có thể hữu ích. Nói một các đơn thuần thì ta có thể set nhiều kiểu dữ liệu cho đầu vào và đầu ra của function.

public function foo(Foo|Bar $input): int|float;

Nhưng Lưu ý rằng void không bao giờ có thể là union type, vì nó chỉ ra “no return value at all”. Hơn nữa, nullable các hợp nhất có thể được viết bằng cách sử dụng |null hoặc bằng cách sử dụng ?ký hiệu hiện có :

public function foo(Foo|null $foo): void;

public function bar(?Bar $bar): void;Code language: PHP (php)

JIT (Just in Time)

JIT được cải tiến hơn và trong PHP 8 giới thiệu hai công cụ biên dịch JIT.
Và Tracing JIT, hứa hẹn nhất vì cho thấy hiệu suất tốt hơn khoảng 3 lần trên các điểm chuẩn tổng hợp và cải thiện 1,5–2 lần trên một số ứng dụng chạy dài cụ thể. Hiệu suất ứng dụng ngang bằng hoặc tốt hơn với PHP 7.4.

PHP 8.0 có những tính năng gì mới?
PHP 8.0 có những tính năng gì mới?

Toán tử nullsafe

Nếu bạn đã quen thuộc với toán tử liên kết null, bạn đã quen với những thiếu sót của nó: nó không hoạt động trên các cuộc gọi phương thức. Thay vào đó, bạn cần kiểm tra trung gian hoặc dựa vào optional người trợ giúp được cung cấp bởi một số khuôn khổ:

$startDate = $booking->getStartDate();

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;
Code language: PHP (php)

Với việc bổ sung toán tử nullsafe, bây giờ chúng ta có thể có hành vi giống như liên kết null trên các phương thức!

$dateAsString = $booking->getStartDate()?->asDateTimeString();

Đối số được đặt tên (Named arguments)

  • Chỉ xác định các thông số bắt buộc, bỏ qua các thông số tùy chọn.
  • Các lập luận không phụ thuộc vào trật tự và tự ghi lại.
/*** PHP 7 ***/
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

/*** PHP 8 ***/
htmlspecialchars($string, double_encode: false);Code language: PHP (php)

Thuộc tính (Attributes)

Thay vì chú thích PHPDoc, giờ đây bạn có thể sử dụng siêu dữ liệu có cấu trúc với cú pháp gốc của PHP.

/*** PHP 7 ***/
class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

/*** PHP 8 ***/
class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}Code language: PHP (php)

Gán giá trị tham số.

Các đối số được đặt tên cho phép bạn chuyển các giá trị vào một hàm, bằng cách chỉ định tên giá trị, do đó bạn không phải xem xét thứ tự của chúng và bạn cũng có thể bỏ qua các tham số tùy chọn!


function foo(string $a, string $b, ?string $c = null, ?string $d = null) 
{ /* … */ }

foo(
    b: 'value b', 
    a: 'value a', 
    d: 'value d',
);Code language: PHP (php)

New mixed type

Một số người có thể gọi nó là một tội ác cần thiết: mixed loại khiến nhiều người có cảm xúc lẫn lộn. Tuy nhiên, có một lập luận rất tốt để giải quyết vấn đề này: một loại bị thiếu có thể có nhiều ý nghĩa trong PHP:

  • Một hàm không trả về gì hoặc null
  • Chúng tôi đang mong đợi một trong nhiều loại
  • Chúng tôi đang mong đợi một kiểu không thể nhập được gợi ý trong PHP

Bởi vì những lý do trên, đó là một điều tốt mà mixed loại được thêm vào. mixed bản thân nó có nghĩa là một trong những loại sau:

  • array
  • bool
  • callable
  • int
  • float
  • null
  • object
  • resource
  • string

Lưu ý rằng nó mixed cũng có thể được sử dụng như một tham số hoặc kiểu thuộc tính, không chỉ như một kiểu trả về.

Cũng lưu ý rằng vì mixed đã bao gồm null, nên không được phép làm cho nó có giá trị vô hiệu. Điều sau sẽ gây ra lỗi:

// Fatal error: Mixed types cannot be nullable, null is already part of the mixed type.
function bar(): ?mixed {}Code language: JavaScript (javascript)

Tổng kết

Trên là những cập nhật điển hình nhất của PHP 8, và bài viết của mình đã nêu được khoảng 80% những gì PHP cập nhật trong phiên bản lần này. Chúc bạn học tốt.

Trả lời

Email của bạn sẽ không được hiển thị công khai.