2011-09-11 33 views
11

Tôi sẽ bắt đầu bằng cách nói rằng tôi biết giao diện PHP hoạt động như thế nào và cách "sử dụng" chúng.Giao diện PHP: Chúng có thể sử dụng được trong thực tế như thế nào?

Câu hỏi của tôi là đúng hơn; làm thế nào để chúng trở nên hữu ích trong các ứng dụng thực tế đời sống?

Tôi đã viết PHP trong hơn 3 năm nay và chưa bao giờ cảm thấy cần cho giao diện. Tôi đang viết giao diện nhiều hơn cho thực hành tốt hơn cho một mục đích cụ thể.

+0

Cho rằng PHP không có kiểm tra loại nghiêm ngặt và sử dụng kiểu gõ vịt, tôi đồng ý. Tôi nghĩ rằng việc sử dụng giao diện sẽ giúp bạn hiểu mã của mình. –

+0

@Micheal Mior: PHP biết loại gợi ý: 'hàm foo (BarClass $ x) {echo $ x-> hello; } ' – KingCrunch

+0

@KingCrunch Nó có, nhưng nó không phải là bằng chứng đánh lừa. – GolezTrol

Trả lời

12

Tôi sẽ cung cấp ví dụ nơi tôi đã sử dụng giao diện trong trải nghiệm thực tế của riêng mình.

Giao diện cực kỳ hữu ích khi bạn cần xác định thứ gì đó giống như kiến ​​trúc plugin. Giả sử ứng dụng của bạn chấp nhận các trình cắm thêm xác thực, cho phép người dùng cuối của bạn tích hợp với cơ sở hạ tầng xác thực nội bộ của riêng họ (LDAP, Shibboleth, một số cơ sở dữ liệu tùy chỉnh, bất kỳ thứ gì). Để cho một plugin để tương thích, nó phải thực hiện các phương pháp sau đây:

validate_user() 
start_user_session() 
logout_user() 
get_user_details() 

Nếu định nghĩa trong một giao diện, một lớp sau đó thực hiện giao diện đảm bảo rằng các phương pháp cần thiết có mặt để tương thích với kiến ​​trúc plugin.

Thật không may, PHP không thực thi kiểu trả về của các phương thức giao diện, vì vậy bạn chỉ cần cẩn thận để ghi lại chức năng trả về dự kiến ​​của các phương thức của bạn.

2

Chúng chưa hữu ích lắm. Mục đích chính của họ có vẻ là cho loại gợi ý. Khi bạn viết hai lớp riêng biệt thực hiện cùng một giao diện, bạn có thể sử dụng giao diện đó trong gợi ý kiểu cho một hàm. Bằng cách đó, bạn biết bạn có tất cả các phương thức của giao diện đó có sẵn trong đối tượng được truyền vào tham số. Thật không may, PHP không thực sự kiểm tra xem có bất kỳ phương thức hay thuộc tính nào mà bạn gọi trên tham số đó thực sự nằm trong giao diện đó hay không, do đó bạn có thể vô tình sử dụng thuộc tính đối tượng không có sẵn trong giao diện. đối tượng của một loại khác được chuyển.

Các ngôn ngữ khác nghiêm ngặt hơn trong tình huống này và sẽ chỉ cho phép bạn chỉ sử dụng chức năng được khai báo trong giao diện.

Tuy nhiên, chúng cũng thuận tiện cho mục đích này trong PHP và có thể những kiểm tra này sẽ trở nên chặt chẽ hơn trong các phiên bản sau, vì vậy sẽ ít bị lỗi hơn.

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