Trang chủ Thủ Thuật Có gì mới trong PHP 8.1?

Có gì mới trong PHP 8.1?

0
85

Có gì mới trong PHP 8.1?

PHP Logo

PHP 8.1 được phát hành vào tháng 11 năm 2021 là phiên bản thứ yếu mới nhất của ngôn ngữ PHP. Nó bổ sung một số tính năng ngôn ngữ mới cùng với một số cải tiến nhỏ hơn và nâng cao hiệu suất. Có một số thay đổi cần lưu ý nhưng hầu hết các bản nâng cấp từ PHP 8.0 đều phải đơn giản.

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

Bản cập nhật PHP năm nay bổ sung một số tính năng mới để nâng cao năng suất của nhà phát triển. Đây là những gì bạn sẽ có thể sử dụng sau khi nâng cấp.

Enums

Các kiểu enum cuối cùng cũng là một phần của ngôn ngữ PHP. Chúng cho phép bạn chỉ định rằng một giá trị phải là một trong một tập hợp các hằng số được xác định trước.

So với các hằng số thông thường, enum cung cấp cho bạn xác nhận tích hợp khi được sử dụng làm tham số phương thức và giá trị trả về. Chúng cũng có thể có các giá trị và phương thức hỗ trợ để đính kèm hành vi bổ sung.

# PHP 8.0lớpTrạng thái bài đăng{hăng sôBản nháp=1;hăng sôĐược phát hành=2;}
 
# PHP 8.0 - Không thể nhập giá trị# trong số `$ PostStatus` phải được xác định# trong `PostStatus`.lớpBài đăng{công cộnghàm số__xây dựng(công cộngdây$ Headline,công cộngNS$ PostStatus){}}
 
# PHP 8.1enum PostStatus{trường hợpBản nháp=1;trường hợpĐược phát hành=2;}
 
# PHP 8.1 - Bây giờ không thể vượt qua# giá trị không hợp lệ làm trạng thái.lớpBài đăng{công cộnghàm số__xây dựng(công cộngdây$ Headline,công cộngTrạng thái bài đăng$ PostStatus){}}

Thuộc tính chỉ đọc

readonly mới đánh dấu thuộc tính lớp là bất biến. Thuộc tính chỉ đọc chỉ có thể được ghi vào một lần. Cố gắng thay đổi giá trị của chúng sau khi khởi tạo sẽ gây ra lỗi.

Quảng cáo

Điều này đơn giản hóa việc tạo các đối tượng giá trị bất biến đơn giản. Trước đây, bạn cần thêm các phương thức lặp lại vào một lớp nếu bạn muốn hiển thị các giá trị thuộc tính mà không cho phép sửa đổi. Giờ đây, bạn có thể đặt các thuộc tính ở chế độ public mà không gặp rủi ro về đột biến không chủ ý.

 # PHP 8.0 - Điều này nhanh chóng trở nên lặp lại!
class Post { public function __construct ( chuỗi được bảo vệ $ Headline ) { }
 
    public function getHeadline ( ) : string { return $ this -> Headline ; } }
 
# PHP 8.1
class Post { public function __construct ( public readonly string $ Headline ) { } }

Các loại giao lộ

Hệ thống kiểu của PHP bây giờ hiểu được các giao điểm. Những điều này cho phép bạn chỉ định rằng một giá trị phải triển khai nhiều giao diện.

Điều này hữu ích trong trường hợp mã cần gọi các phương thức cá thể được xác định bởi hai giao diện khác nhau. Trước đây, bạn cần tạo một giao diện mới mở rộng cả hai giao diện mong muốn. Điều này không phải lúc nào cũng thực tế trong trường hợp bạn không thể sửa đổi lớp đích để triển khai giao diện mới của mình.

Các giao lộ được xác định bằng cách kết hợp hai hoặc nhiều loại với một ký hiệu và ký tự phân biệt. Chúng thêm tính linh hoạt hơn cho hệ thống kiểu sau khi giới thiệu các kiểu liên minh trong PHP 8.0. Một lưu ý là bạn hiện không thể sử dụng các loại giao nhau và kết hợp cùng nhau – Countable&Stringable|CustomType bị giới hạn trong bản phát hành này.

 # PHP 8.0
giao diện CountableString mở rộng Countable, Stringable { }
 
public function countAndReport ( CountableString $ value ) : void { echo " $ value :" . count ( giá trị $ ) ; }
 
# PHP 8.1
public function countAndReport ( Giá trị $ có thể đếm & xâu được ) : void { echo " $ value :" . count ( giá trị $ ) ; }

Sợi

Các sợi là cơ chế để tạo điều kiện thực hiện đồng thời. Chúng giúp dễ dàng triển khai các khối mã có thể tiếp tục lại có thể bị treo từ bất kỳ đâu trong ngăn xếp.

API Fibers là cấp tương đối thấp. Người ta không mong đợi rằng các nhà phát triển người dùng cuối sẽ tương tác với nó một cách thường xuyên. Thay vào đó, Fibers sẽ được tích hợp vào các thư viện cung cấp các API không đồng bộ và triển khai vòng lặp sự kiện. Chúng là một hệ thống luồng điều khiển cho phép đơn giản hóa các trừu tượng cấp cao hơn.

Quảng cáo

Các sợi cung cấp một đường dẫn đến các lệnh gọi hàm không đồng bộ trông giống như các hoạt động đồng bộ thông thường. Bạn có thể cắt bỏ bản ghi sẵn có liên quan đến các lời hứa và lệnh gọi lại. Fibers xử lý việc tạm ngừng và tiếp tục mã tại các điểm thích hợp, cung cấp một API để triển khai các hoạt động chặn và không chặn.

 # PHP 8.0 - Ứng dụng khách HTTP dựa trên lời hứa
$ response = $ httpClient -> request ( "http://example.com" ) -> then ( function ( $ Response ) { return $ Response -> getBody ( ) ; } ) ; in $ phản hồi ;
 
# PHP 8.1 - Ứng dụng khách HTTP sử dụng Fibers trong nội bộ
$ response = $ httpClient -> request ( "https://example.com" ) ; print $ response -> getBody ( ) ;

Có thể gọi hạng nhất

Các bên được gọi hiện là công dân hạng nhất trong ngôn ngữ PHP. Điều này có nghĩa là bạn có thể chỉ định trực tiếp các hàm cho các biến mà không cần sử dụng cú pháp mảng cũ hoặc tạo bao đóng rõ ràng.

Thay đổi này sẽ hữu ích nhất trong bối cảnh lập trình chức năng. Việc chuyển các chức năng xung quanh trở nên sạch sẽ và dễ dàng hơn với phép gán biến trực tiếp.

 # PHP 8.0
$ builtin = Closure :: fromCallable ( "array_filter" ) ; $ method = [ $ this , "getData" ] ;
 
# PHP 8.1
$ nội trang = array_filter ( ... ) ; $ method = $ this -> getData ( ... ) ;

Việc ... thay thế các tham số của hàm là một phần bắt buộc của cú pháp. Điều này báo hiệu bạn muốn gán hàm cho biến, thay vì gọi hàm và gán giá trị trả về của nó.

Sử dụng mới trong trình khởi tạo

Một tính năng mới new trong trình khởi tạo. Bây giờ bạn có thể sử dụng các phiên bản đối tượng làm giá trị tham số mặc định:

 # PHP 8.0
class SendNewsletterAction {Người gửi thư được bảo vệ $ Mailer ; public function __construct ( ? Mailer $ Mailer = null ) { $ this -> Mailer = $ Mailer ?? mới SmtpMailer ( ) ; } }
 
# PHP 8.1
class SendNewsletterAction { public function __construct ( Bảo vệ chỉ đọc Mailer $ Mailer = new SmtpMailer ( ) ) { } }
Quảng cáo

new cũng sẽ hoạt động với các biến tĩnh, hằng số toàn cục và đối số thuộc tính. Nó mang lại cho bạn sự linh hoạt và thuận tiện hơn khi bạn muốn một cá thể đối tượng làm giá trị mặc định.

Các hằng số lớp cuối cùng

final hiện được hỗ trợ cho các hằng số lớp. Bạn có thể đánh dấu các hằng số riêng lẻ là final mà không cần niêm phong toàn bộ lớp. Trước đây các lớp con được tự do ghi đè giá trị của các hằng được thừa kế từ cha mẹ.

 # PHP 8.0 - Không thể không cho phép điều này nếu không có 
# làm cho cả lớp là `cuối cùng`
class DemoClass { public const DemoConstant = 1 ; } lớp ChildClass mở rộng DemoClass { public const DemoConstant = 2 ; }
 
# PHP 8.1 - Chỉ cần hằng số có thể là `cuối cùng`.
lớp DemoClass {
    công khai cuối cùng const DemoConstant = 1 ; } class ChildClass mở rộng DemoClass { // Phát sinh lỗi nghiêm trọng public const DemoConstant = 2 ; }

Khác

Bên cạnh các mục lớn được liệt kê ở trên, PHP 8.1 cũng bổ sung một số tính năng tiện lợi giúp mã tự lập tài liệu hơn. Bạn có thể viết các số bát phân với ký hiệu rõ ràng, chẳng hạn như 0o14 và sử dụng kiểu never trả lại mới để biểu thị các hàm sẽ ném ra một ngoại lệ hoặc thoát khỏi tập lệnh hiện tại. Điều này giúp thông báo phát hiện mã chết trong phần mềm phân tích tĩnh.

Có một vài chức năng mới trong thư viện tiêu chuẩn. array_is_list() cho phép bạn kiểm tra xem một mảng là danh sách ( ["foo", "bar"] ) hay liên kết ( ["foo" => "bar"] ), cung cấp triển khai cài sẵn cho một hàm thường thấy trong mã vùng người dùng hiện có. fsync()fdatasync() cho phép bạn đồng bộ hóa các thay đổi của con trỏ tệp trở lại phương tiện lưu trữ bên dưới. Hỗ trợ natri cho các thuật toán băm XChaCha20 và Ristretto255 cũng đã được thêm vào.

Cuối cùng, bản phát hành này mang đến triển vọng cải thiện hiệu suất. Các tối ưu hóa bao gồm bộ nhớ đệm kế thừa lớp có thể mang lại hiệu suất tăng miễn phí lên đến 8%. Điều này sẽ dễ nhận thấy nhất trong các cơ sở mã hướng đối tượng có nhiều mối quan hệ cha-con. PHP bây giờ sẽ lưu vào bộ nhớ cache các liên kết này để không phải liên tục xây dựng lại chúng.

Các thay đổi ngược lại không tương thích

Vì là một phiên bản nhỏ gặp sự cố, có một số thay đổi đột ngột và việc ngừng sử dụng cần lưu ý trước khi bạn nâng cấp. Dưới đây là những cái có nhiều khả năng là sự cố trong codebase của bạn:

  • Việc ghi đè $_GLOBALS không còn được phép. Bạn vẫn có thể ghi vào các khóa riêng lẻ nhưng không thể gán lại chính $_GLOBALS .
  • Nếu bạn mở rộng một lớp dựng sẵn, các phương thức được ghi đè của bạn phải khai báo kiểu trả về tương thích với kiểu gốc. Một cảnh báo không dùng nữa sẽ được phát ra nếu bạn chỉ định một loại không tương thích. #[ReturnTypeWillChange] hiện được hỗ trợ như một cách để tránh điều này cho các thư viện cần hỗ trợ nhiều phiên bản PHP.
  • Việc null sang không thể null của các hàm nội bộ đã không được chấp nhận. Điều này trước đây đã được cho phép nhưng không phù hợp với việc thực thi kiểu chữ cho các chức năng do người dùng tạo.
  • Các kiểu truyền ngầm từ int đến float đã không được dùng nữa – điều này ảnh hưởng đến các trường hợp chẳng hạn như $array[10.1] , trong đó phần định trị sẽ bị mất vì mảng phải có khóa số nguyên.
  • Là một phần của công việc liên tục của PHP để loại bỏ các loại resource , một số nhóm chức năng hiện hoạt động với các đối tượng mới thay vì tài nguyên. Những thay đổi này áp dụng cho các API FileInfo, FTP, IMAP, LDAP, PgSQL và PSpell.
  • Các hàm hoạt động với các thực thể HTML như htmlspecialchars()htmlentities() hiện thoát khỏi dấu nháy đơn theo mặc định, vì vậy ' sẽ trở thành ' .
  • Việc gọi trực tiếp các phương thức tĩnh trên các đặc điểm không được dùng nữa; bạn nên gọi phương thức trên một lớp sử dụng đặc điểm để thay thế.

Các loại bỏ và ngừng sử dụng khác ảnh hưởng đến các API riêng lẻ bao gồm PDO, MySQLi và Standard. Bạn nên xem lại toàn bộ hướng dẫn di chuyển trước khi nâng cấp dự án của mình.

Quảng cáo

Tổng hợp lại, những thay đổi của chu kỳ này là khá vô hại. Các cơ sở mã vốn đã tuân theo các phương pháp hay nhất của PHP hiện đại sẽ không gặp quá nhiều vấn đề khi chuyển sang 8.1. Các framework phổ biến bao gồm Symfony và Laravel cũng đã hỗ trợ PHP 8.1.

Phần kết luận

PHP 8.1 bổ sung nhiều tính năng mới giúp trải nghiệm phát triển dễ dàng hơn và hợp lý hơn. Enums từ lâu đã là một phần thiếu sót của hệ thống kiểu trong khi các thuộc tính chỉ đọc và tính năng new trong trình khởi tạo sẽ giúp việc viết các lớp mới nhanh hơn.

Fibers giúp làm cho PHP không đồng bộ dễ tiếp cận hơn trong khi các bảng gọi cấp một tạo điều kiện thuận lợi cho các tham chiếu hàm được sắp xếp hợp lý khi thực hành các kỹ thuật lập trình hàm. Tất cả những thay đổi này giúp PHP hoàn thiện hơn như một ngôn ngữ linh hoạt cung cấp các đảm bảo an toàn mạnh mẽ cho mã của bạn trong khi vẫn đơn giản để làm việc.

How to Copy Files Between Kubernetes Pods and Your Machine

Cách sao chép tệp giữa Kubernetes Pods và máy của bạn

How to Set Up HTTPS Personal Access Tokens for Github Authentication

Cách thiết lập mã thông báo truy cập cá nhân HTTPS để xác thực trên Github

How to Use lshw in Linux (With a Practical Example)

Cách sử dụng lshw trong Linux (Với một ví dụ thực tế)

How (and Why) to Run Docker Inside Docker

Cách (và tại sao) chạy Docker Inside Docker

How the SAML Standard Provides Single Sign-On Services

Cách tiêu chuẩn SAML cung cấp dịch vụ đăng nhập một lần

How to Access and Use DigitalOcean Droplet Metadata

Cách truy cập và sử dụng siêu dữ liệu giọt DigitalOcean

Dịch từ: https://www.cloudsavvyit.com/14958/whats-new-in-php-8-1/

Hãy giúp chúng tôi đánh giá bài viết này!

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây