2012-02-29 34 views
6

thể trùng lặp:
traits in php – any real world examples/best practices?Các kịch bản sử dụng có thể có cho các đặc điểm trong PHP là gì?

Trong những loại tình huống người ta sẽ sử dụng đặc điểm trong PHP? Tôi có một ý tưởng tổng thể khá tốt về điều này, nhưng tôi dường như không thể nghĩ ra một cách để sử dụng chúng trong một ứng dụng tôi đã viết, nhưng đó có thể là vì nó không cần những đặc điểm vào thời điểm đó.

Một kịch bản tôi đã nhận ra rằng nhu cầu đặc điểm:

  • Sự kiện. Thay vì có một lớp thực hiện mẫu quan sát và cho phép tất cả các lớp khác kế thừa nó, chỉ cần làm cho nó trở thành một đặc điểm và cho phép các lớp muốn kích hoạt các sự kiện hoặc đăng ký sử dụng đặc điểm đó. Ví dụ, khung công tác Yii đang làm sai nó bằng cách thực hiện các công cụ ở lớp CComponent hơn là sử dụng một Trait.

Về cơ bản chức năng có thể được chia sẻ giữa các lớp, nhưng có thể lan truyền dọc theo nhiều phân cấp lớp nên sử dụng các đặc điểm. Các tình huống khác có thể tận dụng các Đặc điểm hơn là một hệ thống sự kiện là gì?

Trả lời

-4

Vấn đề Traits địa chỉ tương tự như địa chỉ Java có giao diện - cách thực thi hành vi chung (như được biểu diễn bằng giao diện) giữa các lớp không có cùng phân cấp lớp. Với các ngôn ngữ như C++ chỉ có thừa kế, cho hai đối tượng từ hai lớp khác nhau được sử dụng trong cùng một bối cảnh yêu cầu cùng một hành vi, hai lớp phải từ cùng một hệ thống phân cấp. Điều này đôi khi có nghĩa là tạo ra các cấu trúc phân cấp khá đơn giản chỉ để cho phép các đối tượng từ các lớp khác nhau được sử dụng trong cùng một ngữ cảnh.

Java giải quyết vấn đề này thông qua giao diện - giao diện cơ bản là hợp đồng điều chỉnh hành vi để đối tượng của một lớp có thể được thay thế cho đối tượng của một lớp riêng biệt vì nó hứa hẹn cùng một hành vi - giao diện. Nhưng chúng không phải từ cùng một hệ thống phân cấp.

Các đặc điểm PHP thể hiện ý tưởng này. Một đặc điểm là một loại giao diện, một tập hợp các hành vi mà một lớp chứa để nó có thể được sử dụng trong một ngữ cảnh yêu cầu hành vi đó. Vì vậy, bất kỳ ví dụ giao diện Java nào cũng nên chuyển sang ví dụ về PHP Traits. Tuy nhiên, các đặc điểm của PHP có một chút khác biệt với các giao diện Java, vì các đặc tính có thể chứa các định nghĩa đầy đủ chức năng, trong khi các giao diện Java chỉ có thể chứa các khai báo (đặc trưng PHP điển hình!)

+6

PHP cũng có [giao diện] (http://php.net /manual/en/language.oop5.interfaces.php), riêng biệt với các đặc điểm ...! Nếu bạn muốn so sánh táo với táo, các đặc điểm giống như các mixin từ các ngôn ngữ như Ruby hoặc, tốt, các đặc điểm từ các ngôn ngữ như Tự. – deceze

+3

Tôi không nghĩ rằng Giao diện có liên quan nhiều đến Đặc điểm. – Tower

+0

Tôi sẽ chỉ để lại điều này tại đây http://compsci.ca/v3/viewtopic.php?t=14785 –

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