Trong nhiều chủ đề tôi đã thấy (bao gồm TwentyEleven) và trong các ví dụ tôi đã tìm thấy trực tuyến, khi xây dựng functions.php
tệp cho một chủ đề, tất cả chức năng được khai báo trong phạm vi toàn cầu. Để làm rõ, đây là một tệp chức năng điển hình trông như thế nào:
function my_theme_do_foo() { // ... }
function my_theme_do_bar() { // ... }
add_action( 'foo_hook', 'my_theme_do_foo' );
Dường như với tôi rằng mọi thứ có thể được "gói gọn" tốt hơn một chút nếu một lớp được sử dụng:
class MyTheme {
function do_foo() { // ... }
function do_bar() { // ... }
}
$my_theme = new MyTheme();
add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) );
Những lợi thế của cách tiếp cận thứ hai (trong mắt khiêm tốn của tôi):
- Tên hàm ngắn hơn
- Truy cập vào các biến thể hiện (lợi thế lớn nhất IMO)
- Không có chức năng toàn cầu
Những nhược điểm:
- Tên lớp vẫn có thể gây ra xung đột
- Không rõ ràng để "tùy chỉnh" với một chủ đề con (sẽ phải mở rộng một lớp cha)
- Hầu hết các chủ đề không được thực hiện theo cách này, vì vậy bạn sẽ nắm bắt xu hướng
Có lẽ tôi đang xem xét một số thứ, nhưng tôi tự hỏi tại sao không thực hiện phương pháp OOP? Nó cảm thấy một chút "sạch" hơn đối với tôi, nếu có bất cứ điều gì. Có lẽ tôi đã nhầm?
Tôi còn khá mới đối với phát triển chủ đề WordPress, vì vậy hãy tha thứ cho tôi nếu đây là kiến thức phổ biến trong cộng đồng WP :). Chỉ cần cố gắng để tìm hiểu tại sao mọi thứ là như vậy.