Các tính năng mới trong PHP 8

BBMCode đã đăng vào lúc 08:07:09 11/07/2023 | đọc khoảng 4 phút, có 635 từ

PHP đã chính thức phát hành phiên bản 8.0 (26/11/2020), với nhiều cải tiến mới cả về hiệu năng lẫn cú pháp. Trong bài viết này, chúng ta cùng xem các điểm thay đổi chính trong PHP 8 nhé.

 

1. Named Arguments

Khi gọi function, argument có thể truyền không theo thứ tự, chỉ cần chỉ định tên biến (như ví dụ trên là double_encode)

Hoặc các argument optional cũng có thể bỏ qua, không cần thiết truyền vào

 

2. Attributes

Thay vì dùng PHPDoc, giờ đây PHP 8 đã hỗ trợ thêm metadata, cấu trúc và cách viết như ví dụ bên dưới.

 

3. Có thể set property trong constructor

Làm code ngắn gọn hơn, không cần phải khai báo biến và init giá trị cho nó trong constructor như trước đây nữa.

 

4. Union types

Kiểu dữ liệu của biến được chỉ định sẽ được validate. Dùng sai kiểu dữ liệu sẽ phát sinh TypeError ngay lúc compile luôn.

 

5. Match expression

Biểu thức match ra đời với cách sử dụng ngắn gọn, có thể dùng thay cho switch-case.

Mỗi điều kiện trong match đều check cả giá trị và kiểu dữ liệu (strict comparisons ===)

Chi tiết xem thêm tại đây https://www.php.net/manual/en/control-structures.match.php

 

6. Toán tử Nullsafe 

Toán tử này cách viết như bên dưới, ở điều kiện check đầu tiên, nếu đã null thì toàn bộ dãy điều kiện sẽ null. Và cứ như thế sẽ check các điều kiện kế tiếp.

 

7. Saner string to number comparisons

Về phần này như một cải tiến phép so sánh == 

Cùng xem ví dụ nhé

// PHP 7

0 == 'bbmcode' // true
42 == "42foo" // true


// PHP 8

0 == 'bbmcode' // false
42 == "42foo" // false

Với == , trước hết PHP 8 sẽ so sánh đơn giản xem có bằng không. Nếu khác và khác kiểu dữ liệu thì sẽ convert số 0 sang string và so sánh với string 'bbmcode'

 

8. Consistent type errors for internal functions

Trong PHP 8, những warning liên quan đến check kiểu dữ liệu parameter, sẽ được chuyển đổi thành exception.

// PHP 7
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0

// PHP 8
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

 

9. Just-in-time

Trong phiên bản PHP 8.0 lần này PHP cung cấp 2 phiên bản JIT là Tracing JIT và Function JIT cho hiệu suất cao.