Hôm qua, một câu hỏi đã xuất hiện trên Reddit về mục đích của các giao diện trong PHP. Mặc dù tôi đến bữa tiệc quá muộn để đưa ra câu trả lời cho chủ đề đó (ít nhất điều đó sẽ được mọi người chú ý), tôi nghĩ đó là một chủ đề trò chuyện tuyệt vời Show Vì vậy, hãy xem các giao diện trong PHP Các giao diện rất giống với các lớp, ngoại trừ có ít tính năng hơn. Trên thực tế, chỉ có hai điều bạn có thể làm trong một giao diện
Điều này kết thúc trông giống như 3 định nghĩa hai phương thức
Một lần nữa, các phương thức này không thể có phần thân trong một giao diện. Vậy đâu là sự hữu ích trong việc này? Ghi chú. bạn không cần phải đặt tên cho giao diện có hậu tố là 7. Ở đây, tôi chỉ tuân theo các nguyên tắc đặt tên tiện dụng được sử dụng nội bộ bởi PHP Framework Interop Group (PHP-FIG). Bạn có thể đặt tên cho chúng theo cách mà trái tim bạn mong muốnTriển khai giao diệnKhi một lớp bình thường triển khai một giao diện, nó phải triển khai tất cả các phương thức được định nghĩa trong giao diện đó. Theo nghĩa này, đôi khi nó được mô tả như một hợp đồng vì để sử dụng giao diện, lớp mở rộng phải tuân theo hợp đồng của giao diện đó Tất nhiên, một lớp triển khai có thể triển khai các phương thức khác bên ngoài giao diện, nhưng ít nhất nó phải triển khai tất cả các phương thức đó Vậy nếu chúng ta muốn sử dụng 0 thì sao?1 từ khóa. Nó rất giống với việc mở rộng các lớp khác, nhưng chỉ hoạt động với các giao diện. Từ khóa 2 cũng cho phép chúng ta triển khai nhiều giao diện, trong khi mở rộng trong PHP chỉ cho phép bạn mở rộng một lớpLớp 3 được yêu cầu triển khai cả hai phương thức 4 và 6 của lớp 0. Nó phải tuân thủ hợp đồng của giao diệnNhưng một lần nữa. làm thế nào là điều này hữu ích? Tiêm phụ thuộcĐể xem một trong những ứng dụng lớn nhất của giao diện, trước tiên chúng ta phải đi đường vòng và thảo luận về chủ đề tiêm phụ thuộc Dependency injection loại bỏ việc quản lý hoặc khởi tạo các phụ thuộc khỏi lớp bằng cách sử dụng phụ thuộc đó, lớp phụ thuộc và trao nó cho một số cơ quan bên ngoài, thường là cơ chế chịu trách nhiệm khởi tạo lớp phụ thuộc Về cơ bản, với việc tiêm phụ thuộc hoặc các phụ thuộc được trao cho chúng tôi, thay vì chúng tôi tạo ra chúng Vì vậy, nếu trước đây bạn có một lớp trông như thế này
Với phép nội xạ phụ thuộc, lớp này sẽ được cấu trúc lại để trông giống như ________số 8 Bây giờ, thay vì khởi tạo sự phụ thuộc của chúng ta, 3, chúng ta được cung cấp hoặc tiêm vào, sự phụ thuộc này. Rõ ràng điều này đặt ra câu hỏi “làm thế nào để 3 được khởi tạo và chuyển đến 9?Đây là một thay đổi có vẻ nhỏ, nhưng nó mở ra một thế giới khả năng cho mã của chúng tôi
Thế là lần thứ ba. làm thế nào điều này làm cho giao diện hữu ích? Gợi ý loại giao diệnTrong ví dụ trước đây của chúng tôi về phép nội xạ phụ thuộc, chúng tôi đã sử dụng một gợi ý kiểu trong hàm tạo cho 3. Hãy nhớ rằng, 3 là một triển khai cụ thể của giao diện 0Chúng ta có thể thực hiện việc tái cấu trúc này thêm một bước nữa và thay vì nhập gợi ý triển khai cụ thể, thay vào đó chúng ta có thể nhập gợi ý cho 7________số 8 Đây là nơi khái niệm tuân thủ hợp đồng thực sự phát huy tác dụng. 8 của chúng tôi tuyên bố rằng nó yêu cầu một phiên bản của 0. Nó không quan tâm nó nhận được phiên bản cụ thể nào của giao diện này, chỉ cần nó nhận được thứ gì đó với các phương thức mà nó mong đợiĐiều này cho phép chúng tôi tách rời bộ điều khiển của mình khỏi triển khai thực tế và chỉ cần ghép nối bộ điều khiển đó với thông số kỹ thuật. Hơn nữa, nó cho phép chúng tôi trao đổi triển khai cụ thể với một triển khai khác mà không phải thay đổi bất kỳ điều gì với mã sử dụng nó Điều này làm cho các giao diện đặc biệt hữu ích và mạnh mẽ trong PHP Giao diện là hợp đồngChỉ cần đặt. giao diện là hợp đồng mà một số mã triển khai và tuân theo và mã khác phụ thuộc vào. Nó cho phép chúng tôi đảm bảo rằng bất kỳ sự phụ thuộc nhất định nào cũng sẽ thực hiện các phương thức mà chúng tôi mong đợi. Hơn nữa, với PHP 7 sắp tới, chúng ta cũng có thể sử dụng các gợi ý kiểu (đối tượng và vô hướng) và trả về các kiểu để đảm bảo hơn nữa rằng việc triển khai cụ thể tuân thủ các hợp đồng Kiểm tra bài viết của tôi về Triển khai Kiến trúc Onion trong PHP để biết thêm ví dụ về cách sử dụng các giao diện để đạt được mã tách rời, được kiến trúc rõ ràng Một giao diện có thể mở rộng một lớp PHP không?Các giao diện có thể được mở rộng giống như các lớp bằng cách sử dụng toán tử mở rộng . Ghi chú. Lớp triển khai giao diện phải khai báo tất cả các phương thức trong giao diện với chữ ký tương thích. Một lớp có thể triển khai nhiều giao diện khai báo một phương thức có cùng tên.
Một giao diện có thể mở rộng lớp không?Một giao diện có thể mở rộng các giao diện khác , giống như một lớp con của lớp hoặc mở rộng một lớp khác. Tuy nhiên, trong khi một lớp chỉ có thể mở rộng một lớp khác, một giao diện có thể mở rộng bất kỳ số lượng giao diện nào.
Giao diện có mở rộng đối tượng không?Đối tượng là một lớp và các giao diện không thể mở rộng các lớp , vì vậy "không" - giao diện không kế thừa bất kỳ thứ gì từ bất kỳ lớp nào.
Lớp trừu tượng có thể triển khai giao diện PHP không?Giao diện có thể bao gồm các phương thức và hằng số trừu tượng, nhưng không thể chứa các phương thức và biến cụ thể. Tất cả các phương thức trong giao diện phải nằm trong phạm vi hiển thị công khai. Một lớp có thể triển khai nhiều hơn một giao diện, trong khi nó chỉ có thể kế thừa từ một lớp trừu tượng . |