Giao diện trong PHP có các thuộc tính hoặc chúng chỉ có các phương thức?Giao diện PHP có các thuộc tính không?
Trả lời
Điều đó tùy thuộc vào ý nghĩa của "thuộc tính". Nếu bạn có nghĩa là các lĩnh vực thực tế, sau đó không, họ không. Nếu bạn đang đề cập đến các thuộc tính chẳng hạn như các thuộc tính trong C#, thì có thể chúng có thể (vì các trình truy cập thuộc tính đang nghiêm chỉnh cú pháp đường cho các phương thức truy cập). Cũng vậy đối với các sự kiện (mặc dù tất nhiên, trong mỗi trường hợp, không có triển khai nào được chỉ định cho các đối tượng truy cập get
/set
hoặc add
/remove
).
Cập nhật: Vì PHP không có thuộc tính theo nghĩa số get
/set
người truy cập, khi đó câu trả lời cho câu hỏi của bạn là không. Giao diện không thể mang dữ liệu/trạng thái của riêng chúng.
Hằng số được coi là dữ liệu trong một số vòng kết nối. ymmv –
@ nickl- Các vòng kết nối đó là điên vì thay đổi trạng thái, hằng số không. – mpen
Giao diện PHP có thể có hằng số, nhưng không phải thuộc tính (biến mẫu). Nếu bạn không cần sửa đổi "thuộc tính" của mình, bạn có thể sử dụng hằng số để thay thế.
Giao diện trong PHP chỉ có thể chứa phương thức công khai chữ ký không có phần thân phương thức. Chúng cũng có thể chứa các hằng số. Nhưng kia là nó. Không có gì khác.
Xem http://www.php.net/manual/en/language.oop5.interfaces.php
giao diện được định nghĩa bằng cách sử dụng từ khóa giao diện, trong cùng một cách như là một lớp tiêu chuẩn, nhưng không có bất kỳ phương pháp có nội dung xác định. […] Tất cả các phương thức được khai báo trong một giao diện phải được công khai, đây là bản chất của một giao diện. […] Có thể cho các giao diện có các hằng số. Các hằng số giao diện hoạt động chính xác như hằng số lớp ngoại trừ chúng không thể bị ghi đè bởi một lớp/giao diện thừa kế nó.
Lý do [hợp lệ] cần thuộc tính trong giao diện là chỉ định rằng lớp DTO có một khía cạnh nhất định, ví dụ: IOrderable {OrderDate, OrderStatus}, IDeliverable {DeliveryAddress, Route, ...}, v.v. Các khía cạnh có thể được sử dụng trong một số DTO, ví dụ: Đơn đặt hàng, Thứ tự công việc, Hóa đơn bán hàng, v.v. Một lớp DTO có thể hỗ trợ nhiều khía cạnh, nghĩa là nhiều thừa kế mong muốn trong Lớp dữ liệu (nhưng không phải là Lớp mã). Sau đó, khách hàng của DTO được đảm bảo rằng nó có thể xem DTO thông qua khía cạnh đó (một hợp đồng giao diện). Mẫu này tuân theo tất cả 5 nguyên tắc SOLID.
Trong PHP, gần nhất bạn phải giao diện thuộc tính là các đặc tính http://php.net/manual/en/language.oop5.traits.php. Tương tự như các giao diện, các đặc điểm không thể được khởi tạo, tuy nhiên có thể được sử dụng trực tiếp trong các lớp mà không cần thực hiện chúng.
Một đặc điểm không giống như giao diện "thuộc tính" - cũng không giống với giao diện. Điều này chỉ là không chính xác –
Giao diện là một kế hoạch chi tiết cho các phương thức của một lớp, một đặc tính là một nhóm các phương thức/thuộc tính có thể dễ dàng chia sẻ giữa các lớp mà không cần sử dụng phép thừa kế hoặc phụ thuộc. –
@A_funs Đã chỉnh sửa câu trả lời của tôi để làm rõ điểm – Michael
- 1. Thuộc tính trên giao diện
- 2. Giao diện và thuộc tính
- 3. C# thuộc tính trên Giao diện
- 4. Thừa kế giao diện: có thể mở rộng các thuộc tính có thể không?
- 5. Giao diện tối thiểu có thuộc tính Đếm trong .Net
- 6. Delphi Rtti: Khám phá các thuộc tính của giao diện?
- 7. Sử dụng Giao diện có thuộc tính điều hướng
- 8. Chỉ nhận các thuộc tính thực hiện giao diện
- 9. StarUML định nghĩa các phương thức và thuộc tính giao diện trong biểu tượng giao diện?
- 10. Lớp C# có thể kế thừa các thuộc tính từ giao diện của nó không?
- 11. Tôi có thể triển khai giao diện có chứa thuộc tính thuộc loại con cho giao diện được yêu cầu không?
- 12. LINQ to Entities thông qua thuộc tính giao diện
- 13. Thuộc tính/biến thành viên trong giao diện?
- 14. Phản ánh trên tất cả các thuộc tính của giao diện, bao gồm cả các thuộc tính được kế thừa?
- 15. Thuộc tính giao diện gốc không thể truy cập được qua giao diện cha trong trình trợ giúp Html
- 16. PHP Namespaces và giao diện
- 17. SPL của PHP: Các giao diện của nó có liên quan đến mảng bao gồm tất cả các thuộc tính mảng không?
- 18. Cách liệt kê các phương thức giao diện bỏ qua các trình truy cập thuộc tính
- 19. WPF MVVM Cập nhật các thuộc tính giới hạn giao diện người dùng từ BackgroundWorker
- 20. Thêm 'bộ' vào các thuộc tính của giao diện trong C#
- 21. Giao diện hoặc thuộc tính để gắn thẻ các lớp học?
- 22. Làm cách nào để tuần tự hóa một đối tượng có giao diện là thuộc tính?
- 23. php SimpleXML thiếu các thuộc tính
- 24. Thuộc tính Giao diện thừa kế không được tìm thấy bởi Mô hình ràng buộc
- 25. Giao diện người dùng WPF không được cập nhật khi thay đổi thuộc tính
- 26. C# Giao diện: Có thể tham khảo loại thực hiện giao diện trong chính giao diện không?
- 27. Không phụ thuộc vào Giao diện Mocking Framework cho C#
- 28. Giao diện PHP IteratorAggregate vs Iterator?
- 29. Thay đổi loại thuộc tính trong lớp thực hiện giao diện với thuộc tính loại đối tượng
- 30. PHP array_key_exists() và giao diện SPL ArrayAccess: không tương thích?
* (tham khảo) * http://www.php.net/manual/en/language.oop5.interfaces.php – Gordon
Câu hỏi là một câu hỏi hợp lý trong đó, người ta có thể nghĩ đến tài sản công cộng của một lớp học một phần của giao diện công khai lớp đó, và người ta có thể muốn buộc các lớp thực hiện một giao diện để làm cho một thuộc tính có tên nhất định có sẵn. Nhưng bạn không thể - vì vậy bạn chỉ cần có phương thức getProperty() setProperty() trong giao diện - không phải là điều xấu vì mọi người đều biết thuộc tính công khai là ác (tất cả chúng ta đều biết rằng không phải vậy? ? không phải là họ?) –