Giả sử bạn đang xây dựng một ứng dụng web sẽ là sản phẩm đóng gói một ngày, một sản phẩm mà người dùng sẽ muốn có thể mở rộng và tùy chỉnh.Có tùy chọn các lớp tùy chỉnh nhưng tên lớp hợp nhất
Nó đi kèm với một thư viện lõi bao gồm các file PHP có chứa các lớp:
/library/
/library/frontend.class.php
/library/filesystem.class.php
/library/backend.class.php
Bây giờ, giả sử bạn muốn giữ một sạch lõi mà người dùng không thể vá. Tuy nhiên, bạn muốn người dùng có thể tùy chỉnh mọi hạt và bu lông nếu cần.
ý tưởng hiện tại của tôi là tạo ra một cơ chế tự động load rằng, khi một lớp được khởi tạo, tải trọng đầu tiên cốt lõi bao gồm:
/library/frontend.class.php
sau đó, nó chuyển sang thư mục user
và trông cho dù có là một bao gồm các cùng tên:
/user/library/frontend.class.php
nếu có, nó cũng bao gồm điều đó.
Rõ ràng, người dùng bao gồm phải chứa định nghĩa lớp mở rộng định nghĩa trong lõi bao gồm.
Bây giờ câu hỏi của tôi là, làm thế nào tôi có thể khởi tạo một lớp học như vậy? Sau khi tất cả, tôi luôn luôn có thể chắc chắn đó là một định nghĩa về:
class frontend_core
nhưng tôi không thể chắc chắn có một
class frontend_user extends frontend_core
Tuy nhiên, tôi muốn để có thể dựa vào, và nhanh chóng, một tên lớp, bất kể có tiện ích mở rộng tùy chỉnh cho lớp hay không.
Có cách thông minh, ý tưởng hay mô hình để đạt được điều này không?
Tất nhiên, tôi có thể viết một hàm trợ giúp nhà máy đơn giản để tìm lớp user
trước và sau đó cho lớp core
và trả về đối tượng được khởi tạo, nhưng tôi thực sự muốn giữ điều này càng đơn giản càng tốt, vì như tôi đã nói, nó sẽ là một sản phẩm đóng gói.
Tôi đang tìm mẹo hoặc mẫu thông minh sử dụng ít mã và giới thiệu ít chức năng mới nhất có thể.
Tôi muốn giữ thư mục người dùng trống nếu không có tùy chỉnh, nhưng mặt khác, đây là một ý tưởng hay. Nó cung cấp các điểm vào dễ dàng cho người dùng để bắt đầu, thậm chí với các ví dụ mã và giải thích trong các tệp lớp trống. Tôi sẽ suy nghĩ về điều đó. –
Nhưng nó cũng thêm các lớp thừa cần được tải khi người dùng không sử dụng nó, ví dụ: User_Frontend cộng với Core_Frontend thay vì chỉ Core_Frontend khi người dùng chọn để đi với mặc định. – Gordon