Sự khác biệt giữa PHP 7 và 8
Để ý. Trong vài tháng tới, chúng tôi sẽ tổ chức lại trang web tài liệu App Engine để giúp tìm nội dung dễ dàng hơn và phù hợp hơn với các sản phẩm còn lại của Google Cloud. Nội dung tương tự sẽ khả dụng nhưng điều hướng hiện sẽ khớp với phần còn lại của các sản phẩm Đám mây. Nếu bạn có phản hồi hoặc câu hỏi khi điều hướng trang web, hãy nhấp vào Gửi phản hồi Show
Trang này trình bày cách di chuyển PHP 5 của bạn. 5 vào thời gian chạy PHP 7/8 trên môi trường tiêu chuẩn của Máy ứng dụng Vấn đề tương thích giữa PHP 5. 5 và PHP 7/8Tài liệu PHP chính thức cung cấp thông tin về việc di chuyển từ các phiên bản PHP khác nhau
Di chuyển tệp app.yaml của bạnBạn phải đặt bộ điều khiển phía trước để xử lý tất cả định tuyến trong ứng dụng của mình. Để biết thêm thông tin, xem Thời gian chạy PHP 7/8 không cho phép tùy chỉnh phần tử trình xử lý Hành vi của một số phần tử trong tệp cấu hình threadsafe Không dùng nữaTất cả các ứng dụng được coi là an toàn theo luồng, nghĩa là một phiên bản có thể xử lý nhiều yêu cầu cùng một lúc. api_version Không dùng nữaĐược yêu cầu trước đây nhưng không cần thiết trong thời gian chạy PHP 7/8. application_readable Không dùng nữa_______151_______0Không dùng nữa_______151_______1Không dùng nữa Các phụ thuộc bên thứ ba tùy ý có thể được cài đặt bằng tệp siêu dữ liệu app.yaml 2. app.yaml 3Sửa đổi
Nếu bạn sử dụng bất kỳ trường nào không được dùng nữa, sẽ có lỗi khi triển khai ứng dụng Để biết thêm thông tin, hãy xem tài liệu tham khảo Giảm giới hạn thời gian chạyThời gian chạy PHP 7/8 có ít hạn chế hơn so với PHP 5. 5 thời gian chạy
Để biết thêm thông tin, hãy xem tài liệu môi trường thời gian chạy PHP 7/8 Di chuyển từ App Engine PHP SDKĐể giảm bớt sự phức tạp và nỗ lực di chuyển trong thời gian chạy, môi trường tiêu chuẩn của Máy ứng dụng cho phép bạn truy cập nhiều API và dịch vụ đi kèm cũ trong thời gian chạy PHP 7/8, chẳng hạn như Memcache. Ứng dụng PHP 7/8 của bạn có thể gọi các API dịch vụ đi kèm thông qua SDK máy ứng dụng dành cho PHP 7/8 và truy cập hầu hết các chức năng giống như trên thời gian chạy PHP 5. Không phải tất cả các dịch vụ đi kèm kế thừa có sẵn cho PHP 5 đều có dịch vụ tương ứng trong PHP 7/8. Để biết danh sách đầy đủ các API dịch vụ đi kèm cũ có sẵn cho PHP 7/8, hãy xem tài liệu tham khảo API dịch vụ đi kèm cũ Bạn cũng có tùy chọn sử dụng các sản phẩm Google Cloud cung cấp chức năng tương tự như các dịch vụ đi kèm cũ. Các sản phẩm Google Cloud này cung cấp thư viện ứng dụng khách Google Cloud CLI đặc trưng. Đối với các dịch vụ đi kèm cũ không có sẵn dưới dạng các sản phẩm riêng biệt trong Google Cloud, chẳng hạn như dịch vụ tìm kiếm, bạn có thể sử dụng các nhà cung cấp bên thứ ba hoặc các giải pháp thay thế khác. Để tìm hiểu thêm về việc di chuyển sang các dịch vụ không theo nhóm, hãy xem Di chuyển từ các dịch vụ theo nhóm Bản cập nhật lớn mới này mang lại nhiều tối ưu hóa và các tính năng mạnh mẽ cho ngôn ngữ. Chúng tôi rất vui khi được hướng dẫn bạn những thay đổi thú vị nhất sẽ cho phép chúng tôi viết mã tốt hơn và xây dựng các ứng dụng mạnh mẽ hơn PHP8. 0 Phụ lục thông báoBạn đã sẵn sàng chưa? PHP JIT (Trình biên dịch đúng lúc)Tính năng được hoan nghênh nhất đi kèm với PHP 8 là trình biên dịch Just-in-time (JIT). JIT là gì? Đề xuất RFC mô tả JIT như sau
Vì vậy, làm thế nào chúng ta có được JIT, và sự khác biệt giữa JIT so với OPcache là gì? Xem kế hoạch Để hiểu rõ hơn JIT là gì đối với PHP, chúng ta hãy xem nhanh cách PHP thực thi mã nguồn cho đến kết quả cuối cùng Việc thực thi PHP là một quá trình gồm 4 giai đoạn
Hình ảnh sau đây cho thấy một đại diện trực quan của quá trình thực thi PHP cơ bản Quy trình thực thi PHP cơ bảnVậy OPcache làm cho PHP nhanh hơn như thế nào? Tiện ích mở rộng OPcachePHP là ngôn ngữ thông dịch. Điều này có nghĩa là, khi một tập lệnh PHP chạy, trình thông dịch sẽ phân tích cú pháp, biên dịch và thực thi mã lặp đi lặp lại trên mỗi yêu cầu. Điều này có thể dẫn đến và thêm thời gian Đây là nơi tiện ích mở rộng OPcache phát huy tác dụng
Khi bật OPcache, trình thông dịch PHP chỉ trải qua quy trình 4 giai đoạn được đề cập ở trên khi tập lệnh chạy lần đầu tiên. Vì mã byte PHP được lưu trữ trong bộ nhớ dùng chung, nên chúng có sẵn ngay lập tức dưới dạng biểu diễn trung gian cấp thấp và có thể được thực thi ngay trên Zend VM Quy trình thực thi PHP có bật OPcacheKể từ PHP 5. 5, tiện ích mở rộng Zend OPcache có sẵn theo mặc định và bạn có thể kiểm tra xem mình đã định cấu hình đúng tiện ích này hay chưa bằng cách gọi 7 từ tập lệnh trên máy chủ của bạn hoặc kiểm tra tệp php của bạn. ini (xem cài đặt cấu hình OPcache)Cách đọc được đề nghị. Cách cải thiện giới hạn bộ nhớ PHP trong WordPress Phần Zend OPcache trong trang phpinfotải trướcOPcache gần đây đã được cải tiến với việc triển khai tính năng tải trước, một tính năng OPcache mới được bổ sung với PHP 7. 4. Tải trước cung cấp một cách để lưu trữ một tập lệnh được chỉ định vào bộ nhớ OPcache “trước khi bất kỳ mã ứng dụng nào được chạy. ” Tuy nhiên, nó không mang lại sự cải thiện rõ rệt về hiệu suất cho các ứng dụng dựa trên web điển hình Bạn có thể đọc thêm về tải trước trong Với JIT, PHP tiến thêm một bước JIT — Trình biên dịch đúng lúcNgay cả khi opcode là biểu diễn trung gian cấp thấp, chúng vẫn phải được biên dịch thành mã máy. JIT “không giới thiệu bất kỳ biểu mẫu IR (Biểu diễn trung gian) bổ sung nào”, nhưng sử dụng DynASM (Trình biên dịch động cho các công cụ tạo mã) để tạo mã gốc trực tiếp từ mã byte PHP Nói tóm lại, JIT dịch các phần nóng của mã trung gian thành mã máy. Bỏ qua quá trình biên dịch, nó có thể mang lại những cải tiến đáng kể về hiệu suất và mức sử dụng bộ nhớ Zeev Surasky, đồng tác giả của đề xuất PHP JIT, cho thấy mức độ tính toán sẽ nhanh hơn với JIT Nhưng liệu JIT có cải thiện hiệu suất WordPress một cách hiệu quả không? JIT cho các ứng dụng web trực tiếpTheo JIT RFC, việc triển khai trình biên dịch kịp thời sẽ cải thiện hiệu suất PHP. Nhưng liệu chúng ta có thực sự trải nghiệm những cải tiến như vậy trong các ứng dụng thực tế như WordPress không? Các thử nghiệm ban đầu cho thấy JIT sẽ giúp khối lượng công việc sử dụng nhiều CPU chạy nhanh hơn đáng kể.
Khi bật JIT, mã sẽ không được chạy bởi Zend VM mà bởi chính CPU, điều này sẽ cải thiện tốc độ tính toán. Các ứng dụng web như WordPress cũng dựa vào các yếu tố khác như TTFB, tối ưu hóa cơ sở dữ liệu, yêu cầu HTTP, v.v. Đóng góp JIT tương đối vào hiệu suất PHP 8 (Nguồn hình ảnh. PHP8. 0 Phụ lục Thông báo)Vì vậy, chúng ta không nên mong đợi một sự gia tăng đáng kể về tốc độ thực thi PHP khi nói đến WordPress và các ứng dụng tương tự. Tuy nhiên, JIT có thể mang lại một số lợi ích cho các nhà phát triển :
Vì vậy, mặc dù JIT sẽ khó mang lại những cải tiến lớn cho hiệu suất của WordPress, nhưng nó sẽ nâng cấp PHP lên cấp độ tiếp theo, biến nó thành ngôn ngữ mà nhiều chức năng hiện có thể được viết trực tiếp bằng Nhược điểm sẽ là độ phức tạp lớn hơn có thể làm tăng chi phí bảo trì, ổn định và gỡ lỗi. Theo Dmitri Stogov
Đề xuất đưa JIT vào PHP 8 được thông qua với 50 phiếu chống 2 phiếu PHP 8 đã có tại đây. 🚀 Hãy xem phần tìm hiểu sâu của chúng tôi về các tính năng mới. Nhấp để TweetCải tiến PHP 8 và các tính năng mớiNgoài JIT, chúng ta có thể mong đợi nhiều tính năng và cải tiến với PHP 8. Danh sách sau đây là lựa chọn cẩn thận của chúng tôi về các bổ sung và thay đổi sắp tới sẽ làm cho PHP trở nên đáng tin cậy và hiệu quả hơn Khuyến mãi bất động sản xây dựngLà kết quả của một cuộc thảo luận đang diễn ra về việc cải thiện công thái học của đối tượng trong PHP, RFC Quảng cáo Thuộc tính Trình xây dựng đề xuất một cú pháp mới và ngắn gọn hơn sẽ đơn giản hóa việc khai báo thuộc tính, làm cho nó ngắn hơn và ít thừa hơn Đề xuất này chỉ liên quan đến các tham số được thăng cấp, tôi. e. các tham số phương thức đó có tiền tố là các từ khóa hiển thị công khai, được bảo vệ và riêng tư Hiện tại, tất cả các thuộc tính phải được lặp lại nhiều lần (ít nhất bốn lần) trước khi chúng ta có thể sử dụng chúng với các đối tượng. Xem xét ví dụ sau từ RFC
Theo Nikita Popov, tác giả RFC, chúng ta phải viết tên thuộc tính ít nhất bốn lần ở ba vị trí khác nhau. khai báo thuộc tính, tham số hàm tạo và gán thuộc tính. Cú pháp này đặc biệt không sử dụng được, đặc biệt là trong các lớp có nhiều thuộc tính và nhiều tên mô tả hơn RFC này đề xuất hợp nhất hàm tạo và định nghĩa tham số. Vì vậy, kể từ PHP 8, chúng ta có một cách khai báo tham số dễ sử dụng hơn. Mã nhìn thấy ở trên có thể thay đổi như hình dưới đây
Và đó là nó. Vì vậy, chúng tôi có một cách mới để quảng cáo các thuộc tính ngắn hơn, dễ đọc hơn và ít bị lỗi hơn. Theo Nikita
Khai báo thuộc tính được chuyển đổi khi chúng ta khai báo rõ ràng các thuộc tính đó và chúng ta có thể sử dụng Reflection API để xem xét các định nghĩa thuộc tính trước khi thực thi (xem )
Di sảnChúng tôi không có bất kỳ giới hạn nào trong việc sử dụng tính kế thừa kết hợp với các tham số được thăng cấp. Dù sao, không có mối quan hệ cụ thể nào giữa các hàm tạo của lớp cha và lớp con. Theo Nikita
Đây là một ví dụ
Điều gì không được phép với các thuộc tính được quảng cáoCác thuộc tính được quảng cáo được cho phép trong các hàm tạo và đặc điểm không trừu tượng, nhưng có một số hạn chế đáng được đề cập ở đây Trình xây dựng trừu tượngCác thuộc tính được quảng cáo không được phép trong các lớp và giao diện trừu tượng
NullabilityMột trong những ràng buộc đáng chú ý nhất có liên quan đến tính vô hiệu. Trước đây, chúng tôi đã sử dụng một loại không thể vô hiệu hóa một cách rõ ràng. Nhưng với giá trị mặc định null, loại này hoàn toàn có thể vô hiệu hóa. Nhưng với các loại thuộc tính, chúng tôi không có hành vi ngầm định này vì các tham số được thăng cấp yêu cầu khai báo thuộc tính và loại nullable phải được khai báo rõ ràng. Xem ví dụ sau từ RFC
Loại có thể gọiVì callable không phải là a , nên chúng tôi không được phép sử dụng loại có thể gọi được trong các thuộc tính được thăng hạng
Từ khóa var không được phépChỉ có thể sử dụng từ khóa khả năng hiển thị với các tham số được thăng cấp, vì vậy không được phép khai báo các thuộc tính hàm tạo bằng từ khóa 8 (xem ví dụ sau từ RFC)
Không cho phép trùng lặpChúng ta có thể kết hợp các thuộc tính được thăng cấp và các thuộc tính rõ ràng trong cùng một lớp, nhưng các thuộc tính không thể được khai báo hai lần
Tham số biến thể không được phépLý do ở đây là kiểu được khai báo khác với tham số matrixdic, mà thực chất là một mảng
Đọc thêmĐể có cái nhìn cận cảnh hơn về Quảng cáo tài sản xây dựng, hãy nghe cuộc phỏng vấn này với Nikita Popov. Để có cái nhìn tổng quan chuyên sâu về công thái học của đối tượng trong PHP, hãy xem bài đăng này và cuộc phỏng vấn sau đây với Larry Garfield Xác thực cho các phương thức đặc điểm trừu tượngCác đặc điểm được định nghĩa là “một cơ chế tái sử dụng mã trong các ngôn ngữ kế thừa đơn lẻ như PHP. ” Thông thường, chúng được sử dụng để khai báo các phương thức có thể được sử dụng trong nhiều lớp Một đặc điểm cũng có thể chứa các phương thức trừu tượng. Các phương thức này chỉ đơn giản khai báo chữ ký của phương thức, nhưng việc triển khai phương thức phải được thực hiện trong lớp bằng cách sử dụng đặc điểm Theo ,
Điều này cũng có nghĩa là chữ ký của các phương thức phải khớp. Nói cách khác, loại và số lượng đối số bắt buộc phải giống nhau Dù sao, , tác giả của RFC, việc xác thực chữ ký hiện chỉ được thi hành đột ngột
Ví dụ sau đây từ Nikita liên quan đến trường hợp đầu tiên (chữ ký không bắt buộc) 0Như đã nói, RFC này đề xuất luôn đưa ra một lỗi nghiêm trọng nếu phương thức triển khai không tương thích với phương thức đặc điểm trừu tượng, bất kể nguồn gốc của nó 1RFC này đã được nhất trí thông qua Chữ ký phương thức không tương thíchTrong PHP, lỗi kế thừa do chữ ký phương thức không tương thích sẽ gây ra lỗi nghiêm trọng hoặc cảnh báo tùy thuộc vào nguyên nhân gây ra lỗi Nếu một lớp đang triển khai một giao diện, các chữ ký phương thức không tương thích sẽ gây ra lỗi nghiêm trọng. Theo tài liệu Giao diện đối tượng
Dưới đây là một ví dụ về lỗi thừa kế với giao diện 2Trong PHP7. 4, đoạn mã trên sẽ đưa ra lỗi sau 3Một hàm trong lớp con có chữ ký không tương thích sẽ đưa ra cảnh báo. Xem đoạn mã sau từ RFC 4Trong PHP7. 4, đoạn mã trên sẽ chỉ đưa ra một cảnh báo 5Bây giờ, RFC này đề xuất luôn đưa ra một lỗi nghiêm trọng đối với các chữ ký phương thức không tương thích. Với PHP 8, mã mà chúng ta đã thấy trước đó ở trên sẽ nhắc như sau 6Mảng bắt đầu với một chỉ số tiêu cựcTrong PHP, nếu một mảng bắt đầu bằng một chỉ số âm (_______0_______9), thì các chỉ số sau sẽ bắt đầu từ 0 (thêm về điều này trong tài liệu 0). Nhìn vào ví dụ sau 7Trong PHP7. 4 kết quả sẽ như sau 8Bây giờ, RFC này đề xuất thay đổi mọi thứ sao cho chỉ số thứ hai sẽ là 1, tùy theo giá trị của 2Trong PHP 8, đoạn mã trên sẽ dẫn đến mảng sau 9Với PHP 8, các mảng bắt đầu bằng chỉ mục âm sẽ thay đổi hành vi của chúng. Đọc thêm về sự không tương thích ngược trong Liên minh loại 2. 0Các loại liên kết chấp nhận các giá trị có thể thuộc các loại khác nhau. Hiện tại, PHP không cung cấp hỗ trợ cho các kiểu kết hợp, ngoại trừ cú pháp 3 và kiểu đặc biệt 4Trước PHP 8, các loại liên kết chỉ có thể là , như trong ví dụ sau từ RFC 0Bây giờ, Liên minh loại 2. 0 RFC đề xuất thêm hỗ trợ cho các loại liên kết trong chữ ký hàm, vì vậy chúng tôi sẽ không dựa vào tài liệu nội tuyến nữa mà thay vào đó sẽ xác định các loại liên kết bằng cú pháp 5 1Theo giải thích của Nikita Popov trong RFC,
Các loại liên kết hỗ trợ tất cả các loại có sẵn, với một số hạn chế
Bạn có thể đọc thêm về Union Type V2 trong RFC Lỗi loại nhất quán cho các chức năng nội bộKhi truyền một tham số thuộc loại không hợp lệ, các hàm bên trong và do người dùng định nghĩa sẽ hoạt động khác đi Các hàm do người dùng định nghĩa tạo ra một 9, nhưng các hàm bên trong hoạt động theo nhiều cách khác nhau, tùy thuộc vào một số điều kiện. Dù sao đi nữa, hành vi điển hình là đưa ra cảnh báo và trả lại 8. Xem ví dụ sau trong PHP 7. 4 2Điều này sẽ dẫn đến cảnh báo sau 3Nếu 1 được bật hoặc thông tin đối số chỉ định loại, hành vi sẽ khác. Trong các trường hợp như vậy, lỗi loại được phát hiện và dẫn đến một 9Tình huống này sẽ dẫn đến một số vấn đề được giải thích rõ ràng trong Để loại bỏ những điểm không nhất quán này, RFC này đề xuất tạo các API phân tích tham số nội bộ để luôn tạo ra một 3 trong trường hợp loại tham số không khớpTrong PHP 8, đoạn mã trên đưa ra lỗi sau 4ném biểu thứcTrong PHP, 4 là một câu lệnh, vì vậy không thể sử dụng nó ở những nơi chỉ cho phép một biểu thứcTriển khai ứng dụng của bạn lên Kinsta - Bắt đầu với Khoản tín dụng $20 ngay bây giờChạy nút của bạn. js, Python, Go, PHP, Ruby, Java và Scala, (hoặc hầu hết mọi ứng dụng khác nếu bạn sử dụng Dockerfiles tùy chỉnh của riêng mình), trong ba bước đơn giản RFC này đề xuất chuyển đổi câu lệnh 4 thành một biểu thức để nó có thể được sử dụng trong bất kỳ ngữ cảnh nào cho phép biểu thức. Ví dụ: , toán tử hợp nhất null, v.v.Xem các ví dụ sau từ RFC 5Bản đồ yếuBản đồ yếu là một tập hợp dữ liệu (đối tượng) trong đó các khóa được tham chiếu yếu, nghĩa là chúng không bị ngăn thu gom rác PHP7. 4 đã thêm hỗ trợ như một cách để giữ lại tham chiếu đến một đối tượng mà không ngăn chính đối tượng đó bị hủy. Như Nikita Popov đã chỉ ra,
Đó là lý do tại sao RFC này giới thiệu một lớp 6 để tạo các đối tượng được sử dụng làm khóa bản đồ yếu có thể bị hủy và xóa khỏi bản đồ yếu nếu không có bất kỳ tham chiếu nào khác đến đối tượng chínhTrong các quy trình chạy dài, điều này sẽ ngăn rò rỉ bộ nhớ và cải thiện hiệu suất. Xem ví dụ sau từ RFC 6Với PHP 8, đoạn mã trên sẽ cho kết quả như sau (xem phần ) 7Nếu bạn bỏ đặt đối tượng, khóa sẽ tự động bị xóa khỏi bản đồ yếu 8Bây giờ kết quả sẽ như sau 9Để xem kỹ hơn về Bản đồ yếu, hãy xem RFC. Đề xuất đã được nhất trí thông qua Dấu phẩy trong danh sách tham sốDấu phẩy ở cuối là dấu phẩy được thêm vào danh sách các mục trong các ngữ cảnh khác nhau. PHP7. 2 giới thiệu, PHP 7. 3 giới thiệu PHP 8 hiện giới thiệu dấu phẩy ở cuối danh sách tham số với các hàm, phương thức và bao đóng, như trong ví dụ sau 0Đề xuất này được thông qua với số phiếu 58 ăn 1 Cho phép. cú pháp lớp trên các đối tượngĐể lấy tên của một lớp, chúng ta có thể sử dụng cú pháp 7. RFC này đề xuất mở rộng cú pháp tương tự cho các đối tượng để giờ đây có thể tìm nạp tên của lớp của một đối tượng nhất định, như trong ví dụ bên dưới 1Với PHP 8, 8 cung cấp kết quả tương tự như 9. Nếu 0 không phải là một đối tượng, nó sẽ đưa ra một ngoại lệ 9Đề xuất này đã được nhất trí thông qua Thuộc tính v2Thuộc tính, còn được gọi là chú thích, là siêu dữ liệu có cấu trúc có thể được sử dụng để chỉ định thuộc tính cho đối tượng, thành phần hoặc tệp Cho đến PHP 7. 4, doc-comment là cách duy nhất để thêm siêu dữ liệu vào phần khai báo của các lớp, hàm, v.v. Các thuộc tính v2 RFC giới thiệu các thuộc tính PHP, định nghĩa chúng như một dạng siêu dữ liệu có cấu trúc, cú pháp có thể được thêm vào các khai báo của các lớp, thuộc tính, hàm, phương thức, tham số và hằng số Các thuộc tính được thêm vào trước các khai báo mà chúng đề cập đến. Xem các ví dụ sau từ RFC 2Các thuộc tính có thể được thêm vào trước hoặc sau nhận xét khối tài liệu 3Mỗi khai báo có thể có một hoặc nhiều thuộc tính và mỗi thuộc tính có thể có một hoặc nhiều giá trị liên quan 4Xem RFC để biết tổng quan sâu hơn về các thuộc tính PHP, trường hợp sử dụng và cú pháp thay thế Đối số được đặt tênCác đối số được đặt tên cung cấp một cách mới để truyền đối số cho một hàm trong PHP
Chúng ta có thể truyền các đối số được đặt tên cho một hàm bằng cách thêm tên tham số trước giá trị của nó 5Chúng tôi cũng được phép sử dụng các từ khóa dành riêng, như trong ví dụ bên dưới 6Nhưng chúng tôi không được phép chuyển tên tham số động. Tham số phải là một mã định danh và cú pháp sau không được phép 7Theo Nikita Popov, tác giả của RFC này, các đối số được đặt tên mang lại một số lợi thế Trước hết, các đối số được đặt tên sẽ giúp chúng ta viết mã dễ hiểu hơn vì ý nghĩa của chúng là tự ghi lại. Ví dụ dưới đây từ RFC là tự giải thích 8Các đối số được đặt tên không phụ thuộc vào thứ tự. Điều này có nghĩa là chúng ta không buộc phải truyền đối số cho hàm theo thứ tự như chữ ký hàm Cần một dịch vụ lưu trữ cực nhanh, an toàn và thân thiện với nhà phát triển cho trang web của bạn? . Kiểm tra kế hoạch của chúng tôi 9Cũng có thể kết hợp các đối số được đặt tên với các đối số vị trí 0Một ưu điểm lớn khác của các đối số được đặt tên là chúng chỉ cho phép chỉ định những đối số mà chúng ta muốn thay đổi. Chúng tôi không phải chỉ định các đối số mặc định nếu chúng tôi không muốn ghi đè lên các giá trị mặc định. Ví dụ sau từ RFC làm rõ 1Quan trọngNếu bạn là nhà phát triển WordPress, xin lưu ý rằng tại thời điểm viết bài này, các đối số được đặt tên có thể dẫn đến. Không sử dụng chúng trong sản xuất mà không kiểm tra chu đáo Các đối số được đặt tên có thể được sử dụng với , như được hiển thị trong ví dụ sau từ RFC 2Tuy nhiên, việc chuyển các đối số vị trí sau các đối số được đặt tên là không được phép và sẽ dẫn đến lỗi thời gian biên dịch. Điều tương tự cũng xảy ra khi bạn chuyển cùng một tên tham số hai lần Các đối số được đặt tên rất tiện lợi với các khai báo lớp vì các hàm tạo thường có nhiều tham số và các đối số được đặt tên cung cấp một cách “công thái học” hơn để khai báo một lớp Để xem kỹ hơn về Đối số được đặt tên, với các ràng buộc, tính không tương thích ngược và một số ví dụ, hãy xem Đối số được đặt tên RFC Toán tử NullsafeRFC này giới thiệu toán tử nullsafe 2 với đánh giá ngắn mạch đầy đủTrong đánh giá ngắn mạch, toán tử thứ hai chỉ được đánh giá nếu toán tử thứ nhất không đánh giá thành 8. Nếu một người vận hành trong chuỗi đánh giá là 8, thì việc thực hiện toàn bộ chuỗi sẽ dừng lại và đánh giá là 8Xem xét các ví dụ sau từ RFC 3Nếu 6 là null, phương thức 7 không được gọi và 8 được đặt thành 8Xem RFC toán tử nullsafe để biết thêm các ví dụ, ngoại lệ và phạm vi trong tương lai So sánh chuỗi Saner với sốTrong các phiên bản PHP trước, khi thực hiện so sánh không nghiêm ngặt giữa các chuỗi và số, trước tiên, PHP sẽ chuyển chuỗi thành một số, sau đó thực hiện so sánh giữa các số nguyên hoặc số float. Ngay cả khi hành vi này khá hữu ích trong một số trường hợp, nó có thể tạo ra kết quả sai và cũng có thể dẫn đến lỗi và/hoặc sự cố bảo mật Xem xét ví dụ sau từ RFC 4PHP 8 giới thiệu chuỗi Saner để so sánh số, nhằm mục đích làm cho chuỗi so sánh với số hợp lý hơn. Theo lời của Nikita Popov,
Bảng sau đây so sánh hành vi của so sánh chuỗi với số trong các phiên bản PHP trước đó và trong PHP 8 5Đọc thêm về nhiều ý nghĩa của thay đổi này và cách so sánh chuỗi với số thay đổi trong PHP 8 trong RFC chính thức từ Nikita Popov Chuỗi số SanerTrong PHP, các chuỗi chứa số rơi vào
Chuỗi số và chuỗi số đầu được xử lý khác nhau tùy thuộc vào thao tác được thực hiện. Ví dụ
Độ lệch chuỗi, phép toán số học, phép toán tăng và giảm, so sánh chuỗi với chuỗi và phép toán bitwise cũng dẫn đến các kết quả khác nhau RFC này đề xuất
Để biết tổng quan sâu hơn về các chuỗi số trong PHP 8, với các ví dụ mã, ngoại lệ và các vấn đề tương thích ngược, hãy xem RFC Biểu thức đối sánh v2Biểu thức 06 mới khá giống với biểu thức 07 nhưng có ngữ nghĩa an toàn hơn và cho phép trả về các giá trịĐể hiểu sự khác biệt giữa hai cấu trúc điều khiển, hãy xem xét ví dụ 07 sau đây từ RFC 6Bây giờ chúng ta có thể nhận được kết quả tương tự như đoạn mã trên với biểu thức 06 sau đây 7Một lợi thế đáng kể của việc sử dụng biểu thức 06 mới là trong khi 07 so sánh các giá trị một cách lỏng lẻo (_______2_______12) có khả năng dẫn đến kết quả không mong muốn, thì với 06, so sánh là kiểm tra danh tính ( 14)Biểu thức 06 cũng có thể chứa nhiều biểu thức được phân tách bằng dấu phẩy cho phép cú pháp ngắn gọn hơn (nguồn) 8Để biết thêm các ví dụ và trường hợp sử dụng, hãy xem biểu thức Khớp v2 RFC và tài liệu PHP Kiểm tra loại nghiêm ngặt hơn cho toán tử số học/bitwiseTrong các phiên bản PHP trước, cho phép áp dụng các toán tử số học và bitwise cho một mảng, tài nguyên hoặc đối tượng không quá tải. Dù sao, hành vi đôi khi không nhất quán Trong RFC này, Nikita Popov cho thấy hành vi đó có thể phi lý như thế nào bằng một ví dụ đơn giản 9Nikita giải thích cách áp dụng toán tử số học hoặc bitwise cho mảng, tài nguyên hoặc đối tượng không bị quá tải
Với PHP 8, mọi thứ thay đổi và hành vi giống nhau đối với tất cả các toán tử số học và bitwise Ném một ngoại lệ 9 cho toán hạng mảng, tài nguyên và đối tượngCác hàm PHP mớiPHP 8 mang đến một số chức năng mới cho ngôn ngữ str_containsTrước PHP 8, strstr và strpos là các tùy chọn điển hình để các nhà phát triển tìm kiếm một cây kim bên trong một chuỗi nhất định. Vấn đề là cả hai chức năng không được coi là rất trực quan và việc sử dụng chúng có thể gây nhầm lẫn cho các nhà phát triển PHP mới. Xem ví dụ sau 0Trong ví dụ trên, chúng tôi đã sử dụng toán tử so sánh 17 để kiểm tra xem hai giá trị có cùng loại không. Điều này ngăn chúng tôi gặp lỗi
Hơn nữa, một số khung cung cấp các hàm trợ giúp để tìm kiếm một giá trị bên trong một chuỗi nhất định (xem ví dụ) Bây giờ, RFC này đề xuất giới thiệu một chức năng mới cho phép tìm kiếm bên trong một chuỗi. 18 1Cách sử dụng của nó khá đơn giản. 18 kiểm tra nếu tìm thấy 20 trong 21 và trả về 22 hoặc 7 tương ứngVì vậy, nhờ có 18, chúng ta có thể viết đoạn mã sau 2Cái nào dễ đọc hơn và ít bị lỗi hơn (xem mã này đang hoạt động) 18 phân biệt chữ hoa chữ thường, nhưng điều này có thể thay đổi trong tương laiĐề xuất 18 được thông qua với 43 đến 9 phiếu bầustr_starts_with() và str_ends_with()Ngoài chức năng 18, hai chức năng mới cho phép tìm kiếm một cây kim bên trong một chuỗi nhất định. 28 và 29Các hàm mới này kiểm tra xem một chuỗi đã cho bắt đầu hay kết thúc bằng một chuỗi khác 3Cả hai hàm đều trả về 7 nếu 20 dài hơn 21Theo Will Hudgins, tác giả của RFC này,
Nhờ có chúng, giờ đây chúng tôi có thể tránh sử dụng các hàm dưới mức tối ưu và ít trực quan hơn như 35, 36. Cả hai hàm đều phân biệt chữ hoa chữ thường 4Bạn có thể thấy mã này đang hoạt động RFC này đã được phê duyệt với 51 đến 4 phiếu bầu get_debug_type 37 là một hàm PHP mới trả về kiểu của một biến. Hàm mới hoạt động theo cách tương tự như hàm 38, nhưng 37 trả về tên kiểu gốc và giải quyết tên lớpĐó là một cải tiến tốt cho ngôn ngữ, vì 40 không hữu ích cho việc kiểm tra loạiRFC cung cấp hai ví dụ hữu ích để hiểu sự khác biệt giữa hàm 41 mới và hàm 40. Ví dụ đầu tiên cho thấy 38 tại nơi làm việc 5Với PHP 8, chúng ta có thể sử dụng 37, thay vào đó 6Bảng sau đây hiển thị các giá trị trả về của 37 và 38Valuegettype()get_debug_type()1integerint0. 1doublefloattruebooleanboolfalsebooleanboolnullNULLnull“WordPress”stringstring[1,2,3]arrayarrayMột lớp có tên “Foo\Bar”đối tượngFoo\BarMột đối tượng lớp ẩn danh[email được bảo vệ]RFC bổ sungDưới đây là danh sách nhanh các cải tiến bổ sung đã được phê duyệt đi kèm với PHP 8
Điểm chuẩn hiệu suất PHP 8Nếu bạn đang thắc mắc PHP 8 nhanh như thế nào, chúng tôi có câu trả lời. Chúng tôi đã đo điểm chuẩn cho 20 nền tảng/cấu hình PHP trên 7 phiên bản PHP khác nhau (5. 6, 7. 0, 7. 1, 7. 2, 7. 3 và 8. 0) PHP8. 0 nổi lên như người chiến thắng trong hầu hết các nền tảng hỗ trợ nó, bao gồm cả WordPress và Laravel Tổng hợp điểm chuẩn PHP của các nền tảng hàng đầuChẳng hạn, WordPress trên PHP 8. 0 có thể xử lý 18. Nhiều hơn 4% yêu cầu mỗi giây so với PHP 7. 4. Tương tự như vậy, Laravel trên PHP 8. 0 có thể chạy 8. Nhiều hơn 5% yêu cầu mỗi giây so với PHP 7. 3 Nếu trang web hoặc ứng dụng của bạn hoàn toàn tương thích với PHP 8. 0, bạn nên lập kế hoạch cập nhật môi trường máy chủ của mình lên PHP 8. 0 càng sớm càng tốt. Bạn (và người dùng của bạn) chắc chắn sẽ đánh giá cao những lợi ích về hiệu suất của nó. Tuy nhiên, vui lòng kiểm tra trang web của bạn kỹ lưỡng trước khi cập nhật Bạn có thể đọc bài viết điểm chuẩn PHP của chúng tôi để biết thêm thông tin, chẳng hạn như dữ liệu hiệu suất chi tiết, thông tin chi tiết và biểu đồ đẹp PHP 8 đã được phát hành cho GA và mang lại nhiều tính năng và tối ưu hóa cho ngôn ngữ này. 🚀 Hãy xem phần đi sâu của chúng tôi vào PHP 8. Nhấp để TweetBản tóm tắtThật là một chuyến đi. Trong bài đăng này, chúng tôi đã đề cập đến các tính năng và tối ưu hóa thú vị nhất đi kèm với PHP 8. Điều được chờ đợi nhất chắc chắn là trình biên dịch Just in Time, nhưng còn nhiều hơn thế nữa với PHP 8 Đảm bảo đánh dấu bài đăng trên blog này để bạn tham khảo trong tương lai. 🤓 Bây giờ đến lượt bạn. bạn đã sẵn sàng thử nghiệm các tính năng mới của PHP chưa? Nhận tất cả các ứng dụng, cơ sở dữ liệu và trang web WordPress của bạn trực tuyến và dưới một mái nhà. Nền tảng đám mây hiệu suất cao, đầy đủ tính năng của chúng tôi bao gồm
Hãy tự kiểm tra với $20 trong tháng đầu tiên của Lưu trữ ứng dụng hoặc Lưu trữ cơ sở dữ liệu. Khám phá kế hoạch của chúng tôi hoặc nói chuyện với bộ phận bán hàng để tìm thấy sự phù hợp nhất của bạn Tôi nên sử dụng PHP 7 hay 8?Ngoài ra, phiên bản PHP mới hơn hoạt động tốt hơn các phiên bản cũ. Sự gia tăng đáng kể về hiệu suất và bảo mật có thể là tất cả những gì cần thiết để cải thiện và đảm bảo trải nghiệm người dùng tích cực trên trang web của bạn. PHP 8 nhanh hơn đáng kể so với PHP 7 theo nhiều tiêu chuẩn web khác nhau.
Sự khác biệt giữa PHP 7 là gì. 4 và PHP 8?Q. Sự khác biệt giữa PHP 7 là gì. 4 và 8? . Một trong nhiều ví dụ là, WordPress trên PHP 8. 0 có thể xử lý 18. Nhiều hơn 4% yêu cầu mỗi giây so với PHP 7. 4 . Hơn nữa, Laravel trên PHP 8. 0 có thể chạy 8. Nhiều hơn 5% yêu cầu mỗi giây so với PHP 7. 3.
Tôi có nên sử dụng phiên bản PHP 8 không?PHP 8 cho phép bạn viết mã ngắn gọn và xây dựng các ứng dụng mẫu mực hơn với những thay đổi và cải tiến thú vị đối với các RFC trước đó. Xem xét các cải tiến mới, sẽ là một tội ác nếu không nâng cấp phiên bản PHP hiện tại của bạn lên PHP 8. 1 trên trang web WordPress của bạn .
Điều gì đã thay đổi trong PHP 8?PHP8. 0 là một bản cập nhật lớn của ngôn ngữ PHP. Nó chứa nhiều tính năng và tối ưu hóa mới bao gồm các đối số được đặt tên, các loại liên kết, thuộc tính, quảng cáo thuộc tính hàm tạo, biểu thức khớp, toán tử nullsafe, JIT và các cải tiến trong hệ thống loại, xử lý lỗi và tính nhất quán |