Làm thế nào để bạn xác định các thuộc tính trong PHP?
Học Rust theo cách khó khăn cho một quy trình sản xuất Kafka + ScyllaDB (Hội thảo trên web trực tiếp vào ngày 2 tháng 3 năm 2023) - Tiết kiệm chỗ ngồi của bạn Show
PHP 8 — Thuộc tính, Biểu thức khớp và các cải tiến khác Thích In Dấu trang Ngày 18 tháng 10 năm 2022 16 phút đọc qua
xét bởi
Viết cho InfoQTham gia cộng đồng chuyên gia. Tăng khả năng hiển thị của bạn.Phát triển sự nghiệp của bạn Tìm hiểu thêm Chìa khóa rút ra
Bài viết này là một phần của loạt bài viết "PHP 8. x". Bạn có thể đăng ký để nhận thông báo về các bài viết mới trong loạt bài này qua RSS PHP tiếp tục là một trong những ngôn ngữ kịch bản được sử dụng rộng rãi nhất trên web với 77. 3% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ được biết là sử dụng nó theo w3tech. PHP 8 mang đến nhiều tính năng mới và những cải tiến khác mà chúng ta sẽ khám phá trong loạt bài viết này Nội dung được tài trợ có liên quanNhà tài trợ liên quan
PHP 8 là một bản cập nhật lớn cho PHP giới thiệu một số tính năng mới và tối ưu hóa hiệu suất, bao gồm các thuộc tính, biểu thức so khớp, toán tử _______0_______6, toán tử mới, trình biên dịch JIT mới, v.v. Các thuộc tính cung cấp một cách để thêm siêu dữ liệu vào các lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp. Các thuộc tính tương tự như chú thích được một số ngôn ngữ khác hỗ trợ. Toán tử 5, chỉ khả dụng bắt đầu từ PHP 8. 1, có thể được sử dụng trong trình khởi tạo cho các giá trị tham số mặc định, biến tĩnh và đối số thuộc tính. Biểu thức 4 là một cấu trúc điều khiển mới đánh giá một biểu thức chủ đề với các biểu thức điều kiện có nhiều nhánh bằng cách sử dụng toán tử đồng nhất và thực thi nhánh phù hợp. Toán tử 6, trước đây chỉ có thể được sử dụng với một đối tượng lớp, cũng có thể được sử dụng với bất kỳ biểu thức tùy ý nào. Trình biên dịch JIT (Just-In-Time) mang đến những cải tiến về hiệu suất và khả năng sử dụng. Một số ví dụ dựa trên cấu trúc dữ liệu yêu cầu tải xuống và cài đặt tiện ích mở rộng 1 từ đây. Trên Windows, tải xuống DLL cho 8. 1 Non Thread Safe (NTS) x64 từ đây và giải nén php_ds-1. 4. 0-8. 1-nts-vs16-x64. zip tập tin vào một thư mục. Sao chép php_ds. dll từ thư mục giải nén vào. \ext thư mục trong PHP 8. x gốc cài đặt, ví dụ C. \php-8. 1. 9-nts-Win32-vs16-x64\ext. Thêm dòng sau vào php. tập tin cấu hình ini 2Khởi động lại máy chủ tích hợp PHP nếu nó đang chạy Thuộc tínhThuộc tính là các chỉ thị cấu hình được sử dụng để chú thích hoặc trang trí các lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp với siêu dữ liệu có cấu trúc và có thể đọc được bằng máy. “Có cấu trúc” có nghĩa là thông tin siêu dữ liệu có thể được đọc và phân tích cú pháp, làm cho các thuộc tính khác với các nhận xét tài liệu không có cấu trúc, vốn chỉ là các chuỗi đơn giản. Các thuộc tính có thể được sử dụng để cung cấp cấu hình và thông tin khác đôi khi chỉ liên quan và do đó được nhúng, không được mã hóa cứng vào tập lệnh PHP. Sau đây là trình tự điển hình để sử dụng các thuộc tính
Các thuộc tính có thể có một số cách sử dụng, chẳng hạn như
Theo mặc định, một thuộc tính có thể được sử dụng trên bất kỳ hoặc tất cả các loại khai báo được hỗ trợ. Nhưng việc sử dụng thuộc tính có thể bị giới hạn ở một hoặc nhiều loại khai báo sử dụng cờ bitmask đã chọn 6. Cờ 7 là mặc định. Một thuộc tính có thể được sử dụng nhiều lần trên một khai báo bằng cách sử dụng cờ bitmask 8Tiếp theo, chúng ta sẽ khám phá việc sử dụng các thuộc tính với một ví dụ. Giả sử rằng bạn muốn sắp xếp một mảng bằng cách sử dụng một hoặc nhiều hàm sắp xếp, chẳng hạn như 9 để sắp xếp theo thứ tự tăng dần, 0để sắp xếp theo thứ tự giảm dần và 1 để xáo trộn theo thứ tự ngẫu nhiên. Bạn cũng có thể muốn xác thực mảng đầu vào để xác minh rằng nó không phải là một mảng trống hoặc nó có ít nhất hai phần tử để sắp xếp phù hợp. Thông tin loại sắp xếp và thông tin xác thực có thể được cung cấp dưới dạng thuộc tính. Đầu tiên, khai báo một lớp thuộc tính để xác thực
Sau đó, khai báo một lớp thuộc tính khác cho kiểu sắp xếp. Các cờ bitmask 2 và 3 chỉ ra rằng thuộc tính chỉ được sử dụng với khai báo lớp và thuộc tính có thể lặp lại.
Bây giờ hãy khai báo một giao diện với một phương thức duy nhất có tên là sortArray()
Cuối cùng, khai báo một lớp thực hiện giao diện Sắp xếp
Trong lớp, khai báo hai thuộc tính lớp, một cho kiểu sắp xếp và thứ hai cho mảng được sắp xếp
Khai báo một phương thức để xác thực rằng mảng được sắp xếp không phải là một mảng trống. Chú thích phương thức với thuộc tính #[Validate]. Áp dụng thuộc tính cho phương thức làm cho phương thức có thể khám phá được bằng API phản chiếu
Khai báo phương thức thứ hai để xác thực rằng mảng có ít nhất hai phần tử và áp dụng thuộc tính 5 cho nó
Thực hiện chức năng 5. Dựa trên giá trị của 6, hãy sắp xếp tăng dần/giảm dần/xáo trộn
Thêm một chức năng gọi là 7 để thực hiện sắp xếp. Trong hàm, hãy áp dụng các xác thực trước khi thực hiện sắp xếp. Khai báo một lớp và áp dụng thuộc tính 8 cho nó. Vì thuộc tính có thể lặp lại, hãy áp dụng thuộc tính nhiều lần để thực hiện các kiểu sắp xếp khác nhau.
Cuối cùng, tạo một thể hiện của lớp 9
Nhận các thuộc tính lớp bằng API phản chiếu 0Lặp lại mảng thuộc tính để gọi hàm PerformanceSort() để thực hiện sắp xếp cho từng loại kiểu sắp xếp và xuất kết quả sắp xếp 1Tập lệnh 0 hoàn chỉnh để chứng minh việc sử dụng các thuộc tính có sẵn trên GitHub. Sao chép sắp xếp. php vào thư mục 1 và với máy chủ tích hợp PHP đang chạy và nghe tại http. //máy chủ cục bộ. 8000 gọi tập lệnh 0 trong trình duyệt có url http. //máy chủ cục bộ. 8000/tập lệnh/sắp xếp. php. Kết quả sắp xếp sử dụng các kiểu sắp xếp khác nhau được hiển thị trong trình duyệt như trong Hình 1Hình 1. Kết quả sắp xếp theo thuộc tính Vì sắp xếp ngẫu nhiên là sắp xếp ngẫu nhiên nên kết quả của việc sắp xếp ngẫu nhiên có thể khác nhau mỗi khi tập lệnh được chạy, như thể hiện trong Hình 2 Hình 2. Sắp xếp ngẫu nhiên tạo ra một kết quả khác Vì mảng mẫu cần sắp xếp có 4 phần tử nên không có lần xác thực nào thất bại. Nếu mảng mẫu trống, thì ngược lại, cùng một tập lệnh, chỉ có mảng mẫu được thay đổi, sẽ tạo ra một thông báo ngoại lệ thời gian chạy 3. Tương tự, nếu mảng mẫu chỉ có 1 phần tử, ngoại lệ thời gian chạy được tạo với thông báo. 4Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 nâng caoToán tử 5 được sử dụng để tạo một thể hiện của một lớp. Kể từ PHP 8. 1, toán tử new có thể được sử dụng trong các biểu thức tùy ý với cú pháp sau, trong đó biểu thức phải được đặt trong dấu ngoặc đơn. 2Toán tử 5 có thể được sử dụng trong bộ khởi tạo cho các giá trị mặc định của tham số, bộ khởi tạo biến tĩnh, bộ khởi tạo hằng số toàn cục và đối số thuộc tính như được khám phá tiếp theo với các ví dụToán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 trong các giá trị mặc định của tham số chức năngĐể chứng minh việc sử dụng toán tử new trong các giá trị mặc định của tham số hàm, chúng ta sẽ sử dụng một biến thể của ví dụ sắp xếp mảng. Hãy xem xét một lớp có tên là 9 khai báo một phương thức 0 để sắp xếp một mảng theo thứ tự tăng dần. 3Lớp thứ hai có tên là 1 khai báo một phương thức để sắp xếp một mảng theo thứ tự giảm dần 4Bây giờ hãy khai báo một hàm chấp nhận bất kỳ mảng tùy ý nào và một bộ sắp xếp mảng để sắp xếp mảng. Trình sắp xếp mảng mặc định có thể được xác định bằng cách sử dụng toán tử mới để tạo một phiên bản của 9 5Tập lệnh hoàn chỉnh có sẵn trên GitHub. Chạy tập lệnh mẫu trên máy chủ tích hợp với url http. //máy chủ cục bộ. 8000/tập lệnh/mẫu. php Đầu ra được hiển thị ở đây 6Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 trong bộ khởi tạo biến và hằngToán tử 5 có thể được sử dụng trong bộ khởi tạo biến tĩnh và bộ khởi tạo hằng số toàn cầu. Tuy nhiên, toán tử 5 không được hỗ trợ trong bộ khởi tạo thuộc tính lớp tĩnh và không tĩnh, cũng như trong bộ khởi tạo hằng số lớp. Tập lệnh sau đây cho biết bộ khởi tạo biến và hằng nào được hỗ trợ và bộ khởi tạo nào không. 7Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 trong Đối số thuộc tínhNhư bạn mong đợi, toán tử 5 cũng có thể được sử dụng trong các đối số thuộc tính. Chúng tôi sẽ sử dụng cùng một ví dụ mà chúng tôi đã sử dụng để minh họa tính năng Thuộc tính với một điểm khác biệt. Hãy nhớ rằng chúng ta đã sử dụng thuộc tính 8 để chú thích lớp 9 với các đối số thuộc tính được truyền cho nó dưới dạng chuỗi
Đối với trường hợp này, hãy khai báo một lớp có tên là 0 chấp nhận đối số chuỗi làm đối số hàm tạo 9Sử dụng toán tử 5 trong các đối số thuộc tính như sau 0Chạy tập lệnh trong máy chủ tích hợp với cùng đầu ra như trước đây, như trong Hình 3 Hình 3. Kết quả từ việc sử dụng new trong đối số thuộc tính Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 5 không được phép trong một số ngữ cảnhTrước đó, chúng tôi đã đề cập đến một số ngữ cảnh trong đó toán tử 5 không được hỗ trợ, đó là trình khởi tạo thuộc tính lớp tĩnh và không tĩnh, và trình khởi tạo hằng số lớp. Ngoài ra, toán tử 5 không được hỗ trợ trong các ngữ cảnh sau
Đoạn script sau tạo ra lỗi cho các câu lệnh đã nhận xét 1Biểu thức public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 4 mớiPHP 8 giới thiệu một biểu thức 4 mới dưới dạng cấu trúc luồng điều khiển khớp với một biểu thức chủ đề đã cho với một hoặc nhiều nhánh thay thế bằng cách sử dụng so sánh danh tính và trả về một giá trị là kết quả từ nhánh đã khớp. Biểu thức khớp tương tự như câu lệnh 7 nhưng khác như sau
Tiếp theo, chúng tôi minh họa việc sử dụng biểu thức 4 với một số ví dụ. Xuất giá trị trả vềĐể bắt đầu với một ví dụ đơn giản, biểu thức 4 trong tập lệnh sau khớp với giá trị nguyên của 14, được cho dưới dạng biểu thức chủ đề, với nhiều biểu thức điều kiện bao gồm mẫu 15 2Chạy tập lệnh trong công cụ tích hợp bằng cách gọi tập lệnh trong trình duyệt có url http. //máy chủ cục bộ. 8000/tập lệnh/trận đấu. php. đầu ra là 16Trong tập lệnh sau, biểu thức chủ đề không khớp với bất kỳ biểu thức điều kiện không mặc định nào 3đầu ra là 17Không thể nhóm điều kiện 15 với các điều kiện khác như trong tập lệnh 4Khi kịch bản được chạy, nó tạo ra lỗi 5Một ví dụ tương đối phức tạp, tập lệnh sau có một biến được khởi tạo từ lớp 19. Biểu thức chủ đề truy cập biến vectơ trong ký hiệu mảng. 6Gọi tập lệnh trong trình duyệt bằng url http. //máy chủ cục bộ. 8000/tập lệnh/trận đấu. php Kết quả là 20Gán giá trị trả về cho một biếnGiá trị trả về cũng có thể được gán cho một biến và các điều kiện khớp có thể là bất kỳ biểu thức tùy ý nào. Trong tập lệnh sau, biểu thức đối sánh khớp với giá trị boolean đúng như biểu thức chủ đề với các biểu thức điều kiện gọi các hàm chuỗi dựng sẵn khác. 7đầu ra là 8Không ép buộc kiểuKhông giống như so sánh lỏng lẻo được thực hiện bởi một câu lệnh 7, biểu thức 4 tạo ra một so sánh nghiêm ngặt và không có sự ép buộc loại nào được thực hiện. Đầu tiên, một ví dụ về so sánh lỏng lẻo với câu lệnh 7. Đoạn script sau khớp với điều kiện đầu tiên và xuất ra giá trị của 24. 9Ngược lại, 4 trong tập lệnh sau thực hiện so sánh chặt chẽ và khớp với điều kiện mặc định để xuất ra 17 0Ngay cả các giá trị #[Attribute(Attribute::TARGET_CLASS|Attribute::IS_REPEATABLE)] class SortType { function __construct($sortType){ $this->sortType = $sortType; } } 27 cũng được đối sánh bằng cách so sánh danh tínhBiểu thức 4 thực hiện so sánh đồng nhất bằng cách sử dụng toán tử đồng nhất 29), ngụ ý rằng ngay cả các giá trị 27 cũng được so khớp. Khi phương thức 31 trả về 27, biểu thức khớp trong tập lệnh sau thực sự khớp với các giá trị 27 được trả về bởi phương thức_______21_______31. 1Điều kiện đầu tiên được khớp và đầu ra là 2So sánh danh tính 35 có thể được áp dụng cho các giá trị tùy ý ngay cả khi không có giá trị nào được trả về. Giá trị 27 do khớp trả về có thể được gán cho một biến. Tập lệnh sau khớp với giá trị 27 và điều kiện đầu tiên được khớp 3Gọi tập lệnh bằng url http. //máy chủ cục bộ. 8000/tập lệnh/mẫu. php và đầu ra là 27Nhiều điều kiện có thể được phân tách bằng dấu phẩyNhiều biểu thức điều kiện có thể được phân tách bằng dấu phẩy. Đầu tiên, một ví dụ với các điều kiện duy nhất như trong tập lệnh sau. 4đầu ra là 5Lấy ví dụ tương tự và thêm nhiều điều kiện được phân tách bằng dấu phẩy 6Từ 'puush' sai chính tả được liệt kê là phương án thay thế thứ hai trong danh sách biểu thức điều kiện đầu tiên được so khớp và đầu ra là 5kiệt sứcBiểu thức 4 phải đầy đủ. Trong tập lệnh sau, biểu thức chủ đề không phù hợp với bất kỳ điều kiện nào 8Kết quả là, một lỗi được xuất ra 9Toán tử public string $sortType=""; public $arrayToSort=array("B", "A", "f", "C"); 6 hỗ trợ biểu thức tùy ýMột tính năng mới khác là toán tử instanceof chấp nhận bất kỳ biểu thức tùy ý nào. Hai yêu cầu duy nhất là
Để chứng minh toán tử 6 mới, hãy tạo một mẫu tập lệnh PHP. php. Khai báo ba biến cho các tập hợp thuộc các loại khác nhau, chẳng hạn như 19 và 43 0Thêm một hàm tùy ý trả về một lớp, chẳng hạn như \Ds\Vector. lớp dưới dạng một chuỗi. 1Xuất kết quả cho việc sử dụng toán tử 6 với các biến tập hợp khác nhau. Toán tử 6 nhận một biểu thức đánh giá thành một chuỗi trong mỗi lệnh gọi. Mẫu. php được liệt kê 2Tập lệnh chạy ok với PHP 8 và tạo đầu ra Trình biên dịch 3JIT(Just-In-Time)PHP 8 giới thiệu trình biên dịch Just-in-time (JIT) với các mục tiêu sau
Hai công cụ biên dịch JIT được giới thiệu. Truy tìm JIT và chức năng JIT. Chức năng JIT chỉ tối ưu hóa mã trong phạm vi của một chức năng duy nhất, trong khi Truy tìm JIT tối ưu hóa toàn bộ dấu vết ngăn xếp. Truy tìm JIT được hiển thị để cải thiện hiệu suất gấp 3 lần trên các điểm chuẩn tổng hợp và 1. 5 đến 2 lần đối với các truy vấn chạy dài. Theo dõi JIT được hiển thị để cải thiện hiệu suất hơn 4 lần trên tiêu chuẩn Mandelbrot. Trong bài viết này, chúng tôi đã giới thiệu một số cải tiến phù hợp nhất đối với cú pháp PHP 8, bao gồm các thuộc tính, toán tử mới, biểu thức đối sánh, v.v. Trong bài viết tiếp theo, chúng ta sẽ khám phá những cải tiến đối với các lớp và hàm tạo
Bài viết này là một phần của loạt bài viết "PHP 8. x". Bạn có thể đăng ký để nhận thông báo về các bài viết mới trong loạt bài này qua RSS PHP tiếp tục là một trong những ngôn ngữ kịch bản được sử dụng rộng rãi nhất trên web với 77. 3% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ được biết là sử dụng nó theo w3tech. PHP 8 mang đến nhiều tính năng mới và những cải tiến khác mà chúng ta sẽ khám phá trong loạt bài viết này Thông tin về các Tác giảDeepak VohraHiển thị thêmHiển thị ít hơn Lấy cảm hứng từ nội dung này?Trở thành biên tập viên cho InfoQ là một trong những quyết định sáng suốt nhất trong sự nghiệp của tôi. Nó đã thử thách tôi và giúp tôi trưởng thành theo nhiều cách. Chúng tôi muốn có nhiều người tham gia nhóm của chúng tôi Thomas Betts Trưởng ban biên tập, Thiết kế và kiến trúc phần mềm @InfoQ; Viết cho InfoQ Xếp hạng bài viết nàynhận con nuôi Phong cách Đã liên hệ với tác giả Nội dung này nằm trong chủ đề Đám mâychủ đề liên quan
Nội dung liên quan
Bản tin InfoQTổng hợp nội dung của tuần trước trên InfoQ được gửi vào thứ Ba hàng tuần. Tham gia cộng đồng hơn 250.000 nhà phát triển cấp cao. Xem một ví dụ Nhập địa chỉ email của bạn Chọn quốc gia của bạn Tôi đồng ý với InfoQ. com xử lý dữ liệu của tôi như được giải thích trong Thông báo về quyền riêng tư này. Chúng tôi bảo vệ quyền riêng tư của bạn xin chào người lạBạn cần Đăng ký tài khoản InfoQ hoặc Đăng nhập hoặc đăng nhập để gửi bình luận. Nhưng còn rất nhiều điều đằng sau việc đăng ký Làm cách nào để lấy giá trị thuộc tính trong PHP?Phần tử DOME. Hàm getAttribute() là một hàm có sẵn trong PHP, dùng để lấy giá trị của thuộc tính có tên cho nút hiện tại. Thông số. Hàm này chấp nhận một tham số duy nhất $name chứa tên của thuộc tính.
Tại sao lại sử dụng thuộc tính trong PHP?Các thuộc tính cung cấp khả năng thêm thông tin siêu dữ liệu có cấu trúc, máy có thể đọc được trên các khai báo trong mã . Các lớp, phương thức, hàm, tham số, thuộc tính và hằng số lớp có thể là mục tiêu của một thuộc tính. Sau đó, siêu dữ liệu được xác định bởi các thuộc tính có thể được kiểm tra trong thời gian chạy bằng API phản chiếu.
Thuộc tính trong CPP là gì?Các thuộc tính là các cách hiện đại trong C++ để chuẩn hóa mọi thứ nếu mã của chúng chạy trên các trình biên dịch khác nhau . Các thuộc tính được sử dụng để cung cấp một số thông tin bổ sung được sử dụng để thực thi các điều kiện (ràng buộc), tối ưu hóa và tạo mã cụ thể nếu được yêu cầu. |