W wielu motywach, które widziałem (w tym TwentyEleven) oraz w przykładach, które znalazłem w Internecie, podczas tworzenia functions.php
pliku dla motywu cała funkcjonalność jest zadeklarowana w zasięgu globalnym. Aby to wyjaśnić, tak wygląda typowy plik funkcji:
function my_theme_do_foo() { // ... }
function my_theme_do_bar() { // ... }
add_action( 'foo_hook', 'my_theme_do_foo' );
Wydaje mi się, że rzeczy mogłyby być „otoczone” trochę lepiej, gdyby użyto klasy:
class MyTheme {
function do_foo() { // ... }
function do_bar() { // ... }
}
$my_theme = new MyTheme();
add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) );
Zalety drugiego podejścia (w moich skromnych oczach):
- Krótsze nazwy funkcji
- Dostęp do zmiennych instancji (największa zaleta IMO)
- Brak funkcji globalnych
Wady:
- Nazwa klasy nadal może powodować konflikty
- Nie tak jasne jest „dostosowywanie” za pomocą motywu potomnego (musiałby rozszerzyć klasę nadrzędną)
- Większość motywów nie zrobiła tego w ten sposób, więc przełamiesz ten trend
Prawdopodobnie pomijam niektóre rzeczy, ale zastanawiam się, dlaczego nie zastosować podejścia OOP? W ogóle wydaje mi się to „czystsze”. Być może się mylę?
Jestem dość nowy w tworzeniu motywów WordPress, więc wybacz mi, jeśli jest to powszechna wiedza w społeczności WP :). Próbuję tylko dowiedzieć się, dlaczego rzeczy są takie, jakie są.