Em muitos temas que eu vi (incluindo o TwentyEleven) e nos exemplos que encontrei on-line, ao criar o functions.php
arquivo para um tema, todas as funcionalidades são declaradas em um escopo global. Para esclarecer, é assim que um arquivo de funções típico se parece:
function my_theme_do_foo() { // ... }
function my_theme_do_bar() { // ... }
add_action( 'foo_hook', 'my_theme_do_foo' );
Parece-me que as coisas poderiam ser "encapsuladas" um pouco melhor se uma classe fosse usada:
class MyTheme {
function do_foo() { // ... }
function do_bar() { // ... }
}
$my_theme = new MyTheme();
add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) );
As vantagens da segunda abordagem (aos meus humildes olhos):
- Nomes de funções mais curtos
- Acesso a variáveis de instância (a maior vantagem da IMO)
- Nenhuma função global
As desvantagens:
- O nome da classe ainda pode causar conflitos
- Não é tão claro "personalizar" com um tema filho (teria que estender uma classe pai)
- A maioria dos temas não é assim, então você estaria contrariando a tendência
Provavelmente estou ignorando algumas coisas, mas estou me perguntando por que não adotar a abordagem OOP? Parece um pouco "mais limpo" para mim, se é que alguma coisa. Talvez eu esteja enganado?
Eu sou bastante novo no desenvolvimento de temas para WordPress, então me desculpe se esse é um conhecimento comum na comunidade WP :). Apenas tentando aprender por que as coisas são do jeito que são.
fonte
Respostas:
Usar uma classe para encapsulamento é uma abordagem muito comum por vários desenvolvedores de plugins. Eu faço isso e acho mais limpo. Mas para plugins. Os temas são mais processuais por natureza.
Nós não fazemos isso para temas padrão do WordPress, porque aumenta a barreira de entrada. As funções são bastante simples. A remoção de ações vinculadas às classes pode ser difícil (e potencialmente com erros em circunstâncias específicas).
Além disso, várias funções nos temas padrão são conectáveis. Estender uma classe e substituir os métodos é muito mais complicado do que apenas definir a função. E enquanto dois aspectos diferentes do código podem substituir funções diferentes, você não pode estender dinamicamente classes. Como você apontou, a necessidade de estender uma classe pai é definitivamente uma desvantagem.
Pensei em transformar as opções de tema do Twenty Eleven em uma classe, mas nunca cheguei a isso. Esse tipo de funcionalidade separada, semelhante a um plug-in, parece ser um bom candidato ao encapsulamento.
fonte