Có gì mới trong PHP 8.2

Tram Ho

PHP 8.2 sẽ được phát hành vào ngày 24 tháng 11 năm 2022. Trong bài đăng này, chúng ta sẽ tìm hiểu các tính năng, cải tiến hiệu suất, thay đổi và không dùng nữa trong lần phát hành này nhé.

Readonly classes – Lớp chỉ đọc rfc

Ở phiên bản php 8.1 chúng ta có Readonly properties ở phiên bản 8.2 thêm cú pháp để làm cho tất cả các thuộc tính của class chỉ được đọc cùng một lúc.

Về mặt chức năng, việc tạo một lớp chỉ đọc hoàn toàn giống như việc tạo mọi thuộc tính chỉ đọc; nhưng nó cũng sẽ ngăn các thuộc tính động được thêm vào một lớp:

Lưu ý rằng bạn chỉ có thể mở rộng từ các readonly classes  nếu lớp con cũng là readonly class.

Deprecate dynamic properties – Không dùng thuộc tính động rfc

Tôi muốn nói rằng đây là một thay đổi để tốt hơn, nhưng nó sẽ ảnh hưởng một chút. Thuộc tính động không được chấp nhận trong PHP 8.2 và sẽ tạo ra lỗi ErrorException trong PHP 9.0:

New random extension – Phần mở rộng random mới rfc

PHP 8.2 bổ sung một trình tạo số ngẫu nhiên mới để khắc phục nhiều vấn đề với phần trước: nó hoạt động hiệu quả hơn, an toàn hơn, dễ bảo trì hơn và không dựa vào trạng thái toàn cục; loại bỏ một loạt lỗi khó phát hiện khi sử dụng các hàm ngẫu nhiên của PHP.

Có một lớp mới được gọi là Randomizer, chấp nhận một randomizer engine.

nulltrue, and false as standalone types rfc

PHP 8.2 bổ sung thêm ba kiểu mới là null, true và false có thể được coi là các loại hợp lệ. Các ví dụ phổ biến là các hàm tích hợp sẵn của PHP, trong đó false được sử dụng làm kiểu trả về khi xảy ra lỗi. Ví dụ trong file_get_contents:

Trước PHP 8.2, bạn đã có thể sử dụng false cùng với các kiểu khác như một liên hợp; nhưng bây giờ nó cũng có thể được sử dụng như một loại độc lập:

Disjunctive Normal Form Types – DNF Types rfc

Các loại DNF cho phép chúng ta kết hợp union (|) and intersection (&) types, tuân theo một quy tắc nghiêm ngặt: intersection types phải được nhóm với dấu ngoặc. Trong thực tế, nó trông như thế này:

Trong trường hợp này, (HasTitle & HasId) | null là kiểu DNF.

Constants in traits rfc

Bây giờ bạn có thể sử dụng hằng số trong các trait:

Bạn sẽ không thể truy cập hằng số thông qua tên của trait, từ bên ngoài trait hoặc từ bên trong nó.

Tuy nhiên, bạn có thể truy cập hằng số thông qua class sử dụng trait, với điều kiện là nó công khai:

Redact parameters in back traces rfc

Khi code chạy trên production thường xảy ra lỗi, chúng ta có thể dùng các dịch vụ theo dõi để phát hiện điều này và gửi chúng cho dev sửa. Thường khi lỗi phát sinh sẽ có stack traces để có thể dò tìm lỗi, nhưng nó cũng đi kèm với những thông tin nhạy cảm như biến môi trường, mật khẩu hoặc tên người dùng.

PHP 8.2 cho phép bạn đánh dấu các “tham số nhạy cảm” như vậy bằng một thuộc tính, do đó bạn không cần phải lo lắng về việc chúng được liệt kê trong stack traces khi có sự cố. Đây là một ví dụ từ RFC:

Fetch properties of enums in const expressions – Lấy giá trị của enum trong biểu thức hằng số rfc

Không dùng chuỗi nội suy ${} rfc

PHP có một số cách để nhúng các biến trong chuỗi. RFC này không chấp nhận hai cách làm như vậy, vì chúng hiếm khi được sử dụng và thường dẫn đến nhầm lẫn:

Nói rõ hơn: hai cách nội suy chuỗi phổ biến vẫn hoạt động:

Không dùng utf8_encode()utf8_decode() rfc RFC gợi ý sử dụng mb_convert_encoding() để thay thế

strtolower()strtoupper() không còn hỗ trợ locale characters ví dụ như umlaut-a (ä) nếu muốn hỗ trợ bạn hãy dùng mb_strtolower()

Xem bản đẹp tại: https://chungnguyen.xyz/posts/what-s-new-in-php-8-2

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo