Manual do WP Core> Padrões de codificação PHP> Convenções de nomenclatura sugere o seguinte para nomear arquivos com classes:
Os nomes dos arquivos de classe devem se basear no nome da classe com
class-
prefixo e os sublinhados no nome da classe substituídos por hífens, por exemploWP_Error
:class-wp-error.php
Embora o texto da seção seja destinado principalmente ao uso principal , o estilo de codificação geralmente se aplica (e deve, na minha opinião) ao código WP de terceiros.
No entanto, como o core não suporta namespaces (PHP 5.2, ugh), isso não explica esse caso.
Qual é o caminho prático a seguir, na perspectiva da conveniência do desenvolvedor? Suporte de carregadores automáticos?
Eu pude ver várias maneiras alternativas:
- ignorando completamente o espaço para nome
- incluindo espaço para nome no nome do arquivo
- usando namespaces como níveis de pasta
- usando o esquema de nomeação alternativo, como PSR
oop
coding-standards
Rarst
fonte
fonte
Respostas:
Primeiro, ignore o
class-
prefixo. Isso vem da abordagem de código processual puro do WordPress, as classes são usadas como contêineres para código processual, não para objetos reais, e a maioria dos arquivos não contém classes ou classes e outros códigos juntos. Não faz sentido quando todos os seus arquivos contêm apenas uma classe e nada mais.Se você seguisse esse padrão, teria que usar
interface-foo.php
etrait-bar.php
. Isso não parece ridículo, torna o carregamento automático mais difícil do que o necessário.A maneira mais fácil de separar namespaces e nomes de classe / interface / característica é (pela minha experiência) atribuindo namespaces a nomes de diretório e nomes de classe a nomes de arquivos. Isto torna muito fácil para mapear a classe solicitada para uma determinada estrutura de arquivos na auto-loader: apenas converter
\
para/
, anexar.php
e carregar o arquivo.Isso facilita também o cache das pesquisas: para cada diretório / namespace, você pode buscar todos os arquivos existentes na primeira vez em que o diretório é solicitado e, para chamadas posteriores, pode reutilizar essa lista de nomes de arquivos sem solicitar
file_exists()
sempre .fonte
Eu fiz uma classe para esse requisito, compatível com PSR-4 e seguindo os padrões de codificação do Wordpress.
Você pode acessá-lo aqui: https://github.com/pablo-pacheco/wp-namespace-autoloader
A explicação está toda lá, mas basicamente é uma dependência do compositor. Você só precisa exigi-lo em seu projeto:
E depois chame a classe
fonte
Geralmente vou com a segunda metade de suas opções:
Se você usar o compositor para registrar um carregador automático PSR-4, poderá ficar perto das convenções de nomenclatura do WP. Espaços para nome mapeados para pastas que podem conter sublinhados com arquivos nomeados como a classe que também podem conter sublinhados. Gostar:
Quando o WP passa para o php 5.3+ (isso deve acontecer eventualmente, certo ?!), as diretrizes precisam ser atualizadas. Como o PSR-0 já está obsoleto, o PSR-4 deve ser recomendado pelo menos se não for necessário.
fonte
A solução de pablo-sg-pacheco funcionou para mim, o carregamento automático depende do compositor ainda compatível com os padrões de codificação do WordPress, no entanto, o URL do repositório do Github é:
https://github.com/pablo-sg-pacheco/wp-namespace-autoloader
e o nome do pacote é:
Por fim, você também precisará adicionar o seguinte ao seu composer.json porque o pacote não está disponível no packagist:
fonte