2010-05-03 48 views
50

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?

+0

* (tham khảo) * http://www.php.net/manual/en/language.oop5.interfaces.php – Gordon

+2

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ọ?) –

Trả lời

28

Đ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.

+3

Hằng số được coi là dữ liệu trong một số vòng kết nối. ymmv –

+1

@ 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

10

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ế.

17

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ó.

-1

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.

+0

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 –

+0

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. –

+0

@A_funs Đã chỉnh sửa câu trả lời của tôi để làm rõ điểm – Michael

Các vấn đề liên quan