Một giao diện PHP xác định một hợp đồng mà một lớp phải thực hiện. Nếu một lớp PHP là bản thiết kế cho các đối tượng, thì một giao diện là bản thiết kế cho các lớp. Bất kỳ lớp nào triển khai một giao diện nhất định đều có thể có hành vi giống nhau về những gì có thể được gọi, cách gọi và những gì sẽ được trả về Show
Trong một bài viết trước, tôi đã nói về các lớp PHP. Trên cơ sở đó, hôm nay chúng ta sẽ nói về giao diện Khái niệm cơ bản về giao diện PHPĐối với một ví dụ về những điều cơ bản về Giao diện PHP, chúng tôi sẽ xem xét "thứ gì đó phát ra âm thanh". Trong thế giới thực, đây có thể là một con chim ("tweet"), một con chó ("sủa"), một con mèo ("meo meo") hoặc một con người ("hát"). Chi tiết về cách xưng hô là đặc trưng của từng loại, nhưng mỗi loại có thể phát âm Chúng ta có thể mô tả điều này như sau
Những gì chúng tôi đang nói ở trên là. đưa ra một chuỗi $message, vocalize() sẽ trả về những gì nghe được dưới dạng một chuỗi Bây giờ, một giao diện không tự làm bất cứ điều gì. Tuy nhiên, nó hoạt động như một kiểu PHP. Điều này có nghĩa là bạn có thể nhập gợi ý vào nó làm đối số hoặc thậm chí trả về nội dung nào đó thuộc loại đó từ một hàm hoặc phương thức Để tạo một cái gì đó thuộc loại đó, chúng ta cần có sẵn một triển khai. Các lớp có thể thực hiện một giao diện
Giả sử chúng ta có một chức năng như sau
Hàm trên có thể được gọi với bất kỳ $vocalizer nào triển khai Vocalizer
Kế thừa và thay thếTóm lại, giao diện cung cấp cho chúng tôi cách cung cấp các tính năng mà không yêu cầu kế thừa lớp. Điều này có thể thực sự hữu ích để điều chỉnh các lớp hiện có để hoạt động trong các ngữ cảnh khác.
Chúng tôi có thể thực hiện một trong hai điều để biến lớp này thành Trình phát âm vào thời điểm này, trong khi vẫn giữ tất cả các chức năng hiện có Đầu tiên, chúng ta có thể cập nhật lớp để triển khai trực tiếp giao diện Vocalizer
Ngoài ra, chúng ta có thể tạo một tiện ích mở rộng của Bird thực hiện Vocalizer
Bởi vì cái sau này là một phần mở rộng của Bird, nó đáp ứng loại Bird cho gợi ý đánh máy; . Bạn cũng có thể thực hiện những điều trên thông qua triển khai lớp ẩn danh
Điều này dẫn chúng ta đến một lý do chính để sử dụng các giao diện. khả năng thay thế một loại cho một loại khác Năm nguyên tắc lập trình hướng đối tượngKhi thực hiện lập trình hướng đối tượng, có một bộ năm nguyên tắc thiết kế cốt lõi được khuyến nghị để tạo ra các kiến trúc linh hoạt, có thể bảo trì được gọi là các nguyên tắc RẮN • Nguyên tắc đơn trách nhiệm Nguyên tắc đảo ngược phụ thuộcĐiều tôi muốn chỉ ra ở đây là nguyên tắc nghịch đảo phụ thuộc Nguyên tắc đảo ngược phụ thuộc nói rằng chúng ta nên phụ thuộc vào sự trừu tượng, chứ không phải việc triển khai. Điều đó nghĩa là gì? Nếu chúng ta chỉ lo lắng về tiếng kêu, chúng ta không cần phải lo lắng về việc chúng ta có Chim, Người hay Thú hay không. Chúng ta nên lo lắng về việc liệu chúng ta có thứ gì đó có khả năng phát âm hay không. Các giao diện cho phép chúng tôi xác định các khả năng này và sau đó cho phép mã của chúng tôi đánh máy theo các khả năng đó chứ không phải một loại cụ thể hơn. Điều này đến lượt nó cho phép chúng tôi thay thế các loại khác nhau khi chúng hoàn thành hợp đồng được xác định bởi giao diện Lỗi Thường Gặp Khi Thực Hiện Lập Trình Hướng Đối TượngMột sai lầm phổ biến khi bắt đầu thực hiện lập trình hướng đối tượng là tạo cây thừa kế chặt chẽ. một lớp cơ sở, sau đó là các kiểu con của lớp cơ sở đó, rồi các triển khai của các kiểu con đó, v.v. Điều này có thể dẫn đến việc tạo ra một lớp về mặt kỹ thuật có hàng chục hành vi khác nhau trở lên, nhưng chỉ được sử dụng cho một trong số chúng. Bằng cách chia nhỏ các hành vi này thành các giao diện khác nhau, chúng ta có thể tạo các lớp chỉ thực hiện các hành vi cụ thể và sử dụng chúng ở bất cứ nơi nào cần đến các hành vi đó. Chúng ta có thể định nghĩa gì trong một giao diện PHP?Bây giờ chúng ta đã có ý tưởng cơ bản về giao diện là gì, tại sao chúng ta có thể sử dụng một giao diện và cách chúng ta có thể triển khai một giao diện? Giao diện trong PHP được giới hạn ở. Trong bài viết trước của chúng tôi về các lớp PHP, chúng tôi đã lưu ý rằng khả năng hiển thị là một chủ đề nâng cao hơn. Nó vẫn vậy, nhưng chúng ta có thể bao gồm một số điều cơ bản. Tóm lại, khả năng hiển thị giúp nêu chi tiết những gì có thể sử dụng chức năng và ở đâu. Một cái gì đó có khả năng hiển thị công khai có thể được truy cập cả trong các phương thức của lớp, cũng như từ các thể hiện. Cái sau có nghĩa là gì? ________số 8$chickadee là một ví dụ lạc đề. Hằng số lớpTrong bài viết về các lớp, chúng tôi không đề cập đến các hằng số của lớp. Một hằng số lớp giống như một hằng số PHP bình thường ở chỗ nó mô tả chi tiết một giá trị không đổi. Đó là một giá trị không thể được chỉ định lại sau này. Để khai báo một hằng số lớp, bạn sử dụng từ khóa const trong khai báo lớp của mình và tùy chọn toán tử khả năng hiển thị (như thuộc tính và phương thức, khả năng hiển thị mặc định là công khai)
Sau đó, bạn tham khảo cách sử dụng tên lớp và tên hằng, cách nhau bởi 0Một hằng số lớp có thể là bất kỳ kiểu vô hướng nào, hoặc một mảng, miễn là không có phần tử nào của mảng là đối tượng. Họ thậm chí có thể tham khảo các hằng số khác nếu cần Theo quy ước, tên hằng thường viết HOA, sử dụng dấu phân cách gạch dưới Các hằng số được xác định trên một giao diện được kế thừa bởi tất cả các triển khai Khi định nghĩa một phương thức trên một giao diện, bạn bỏ qua phần thân và các dấu ngoặc của nó, thay vào đó kết thúc phần khai báo bằng dấu chấm phẩy (;); . Chúng chỉ ra những gì việc triển khai phải xác định để có hiệu lực Chúng ta đã thấy một định nghĩa phương thức trước đây, khi chúng ta định nghĩa một phương thức vocalize() trên giao diện Vocalizer của mình 1Như vậy, bất kỳ triển khai nào cũng phải xác định phương thức này và tương thích. Họ có thể thêm nhiều đối số hơn — nhưng chỉ khi những đối số đó là tùy chọn. Đó là cách duy nhất họ có thể khác nhau Khả năng thực hiện nhiều kế thừaMột tính năng mà một số ngôn ngữ cung cấp là đa kế thừa. Tính năng này cho phép một đối tượng mở rộng nhiều loại khác và do đó đáp ứng tất cả. Ví dụ, một lớp Ngựa có thể mở rộng cả lớp Động vật và Xe PHP không cung cấp đa kế thừa, ít nhất là không trực tiếp. Tuy nhiên, những gì nó cung cấp là khả năng triển khai nhiều giao diện. Điều này có thể hữu ích đặc biệt khi bạn muốn mô tả một tập hợp con các tính năng mà một lớp cụ thể cung cấp trong một ngữ cảnh nhất định. Ví dụ về triển khai nhiều giao diệnVí dụ: gói laminas/laminas-cache xác định nhiều giao diện mô tả khả năng của bộ điều hợp lưu trữ, bao gồm FlushableInterface, OptimizableInterface, ClearByPrefixInterface, TaggableInterface, v.v. Các bộ điều hợp riêng lẻ đều là bộ điều hợp lưu trữ, nhưng chúng có thể cho biết chúng có các khả năng khác bằng cách triển khai các giao diện này Để triển khai nhiều giao diện, bạn cung cấp một danh sách các giao diện được phân tách bằng dấu phẩy theo sau từ khóa implements khi khai báo lớp của bạn 2Sau đó, một thể hiện của lớp này sẽ hoàn thành các gợi ý đánh máy đối với từng giao diện này Đặt tên giao diện PHPBạn nên đặt tên cho giao diện của mình như thế nào? . Theo ví dụ của chúng tôi, chúng tôi đang xác định thứ gì đó phát ra âm thanh, vì vậy chúng tôi đặt tên cho giao diện là Bộ phát âm Điều này có thể khó hình dung, đặc biệt nếu bạn trích xuất một giao diện từ một lớp mà bạn đã định nghĩa trước đó, trong đó tên logic đã là tên của một lớp hiện có (e. g. , bạn có thể muốn xác định giao diện Logger, nhưng lớp Logger đã tồn tại). Đôi khi khó khăn trong việc đặt tên là do có một nhóm các nhà phát triển từ các nền tảng hoặc quốc gia khác nhau (ví dụ:. g. , một số thành viên trong nhóm có thể không chia sẻ cùng một ngôn ngữ mẹ đẻ). Do đó, nhiều dự án sử dụng hậu tố Giao diện để đơn giản hóa quyết định đặt tên, cũng như gọi ra tệp lớp nào trong dự án là hợp đồng so với triển khai Bạn và nhóm của bạn nên quyết định cách tiếp cận nào phù hợp nhất với bạn Bước tiếp theoGiao diện PHP cung cấp các loại có thể sử dụng lại chi tiết các hành vi cụ thể mà ứng dụng của bạn có thể sử dụng. Đặc biệt, chúng cho phép bạn tạo các lớp có các hành vi đã biết, dự kiến phù hợp với kiến trúc ứng dụng của riêng bạn. Các giao diện PHP cũng cho phép bạn thay thế các triển khai khác nhau, bất kể kế thừa lớp thông thường, giúp bạn linh hoạt hơn trong cách cấu trúc các ứng dụng của mình bài viết này hầu như không đầy đủ. Zend by Perforce có một số tài nguyên giúp bạn tìm hiểu thêm về lập trình hướng đối tượng bằng ngôn ngữ PHP. Kiểm tra các lựa chọn đào tạo của chúng tôi ở đây Các thuộc tính có được phép trong giao diện không?Một giao diện có thể xác định cách triển khai mặc định cho các thành viên, bao gồm các thuộc tính . Việc xác định triển khai mặc định cho thuộc tính trong giao diện là rất hiếm vì giao diện có thể không xác định trường dữ liệu mẫu.
Giao diện có thể có biến trong PHP không?Một giao diện có thể chứa các phương thức và hằng, nhưng không được chứa bất kỳ biến nào .
Các thuộc tính của một giao diện là gì?Mã byte của một giao diện xuất hiện trong một. . Bạn không thể khởi tạo một giao diện Một giao diện không chứa bất kỳ hàm tạo nào Tất cả các phương thức trong một giao diện đều trừu tượng Một giao diện không thể chứa các trường thể hiện. . Một giao diện không được mở rộng bởi một lớp; Chúng ta có thể tạo đối tượng giao diện trong PHP không?Giao diện là một tính năng quan trọng của lập trình hướng đối tượng nhờ đó có thể chỉ định các phương thức sẽ được thực hiện bởi một lớp mà không cần phải xác định cách thực hiện chúng. PHP hỗ trợ giao diện theo cách nếu từ khóa giao diện . Giao diện tương tự như lớp nhưng với các phương thức không có phần thân định nghĩa. |