Avaliando namespaces PHP


11

Estou na fase de pré-lançamento de um projeto PHP de código aberto, que espero que seja usado por outros desenvolvedores em seus próprios projetos. No momento, o projeto não suporta espaços para nome e estou tentando avaliar se ele deve usar espaços para nome ou a convenção de nomenclatura PEAR de Dir_Subdir_Class, que parece ter todos os mesmos benefícios técnicos sem algumas desvantagens. Para ser sincero, não é uma escolha fácil.

Alguns pontos de consideração em relação aos namespaces:

  • Uma das maneiras pelas quais meu projeto está tentando se diferenciar, fornecendo uma API mais simples do que outros projetos similares. Como os espaços para nome são novos e também porque são mais complicados do que a convenção de nomenclatura PEAR, introduzi-los na base de código tornará meu projeto menos simples de usar. Ao implementá-los, perco alguma diferenciação em termos de facilidade de uso.
  • Embora eu possa ver alguns benefícios para os namespaces, eles não parecem resolver um problema que precisa ser resolvido em um produto PHP moderno que usa a convenção de nomenclatura PEAR. Nomear conflitos ao usar meu projeto deve ser mínimo, se não existir.
  • Este artigo me dá uma pausa na adoção de namespaces, pois sua implementação tem sido menos do que estelar.
  • Também hesito em pular em uma onda que pode não ir a lugar algum. Como os espaços para nome são um novo recurso do PHP, ainda não estou convencido de que eles se tornem padrão.
  • Compatibilidade. Quase todo o código PHP que já foi escrito não usa namespaces, pois é um novo recurso. Outras bibliotecas seriam incompatíveis sem uma conversão.

Alguns pontos para usar namespaces:

  • Percepção. Se os namespaces se tornarem padrão e uma prática recomendada, meu projeto poderá rapidamente ser visto como não profissional e obsoleto sem eles.
  • Concorrência. Embora alguns projetos PHP concorrentes estejam começando a usar namespaces em suas versões mais recentes, muitos ainda não deram o salto. Fazer isso agora pode ajudar o meu projeto em outros projetos.
  • O trabalho futuro seria mais fácil se eu fizesse a troca agora antes que o projeto se tornasse público, e não depois, onde teria que suportar duas versões dele por um tempo.
  • Quero dar suporte às práticas recomendadas e, se os namespaces se tornarem uma prática recomendada para PHP, meu projeto deve fazer uso deles.

Pelo que sei, você deve escolher um caminho ou outro; você não pode fazer as duas coisas. Há algum ponto que eu não considerei? Existem sinais objetivos (sem guerra de fogo, por favor) que apontem para ou contra os namespaces que se tornam o padrão profissional do PHP? Agradecemos qualquer insight ou recursos que você gostaria de compartilhar, pois preciso tomar uma decisão em breve.

Respostas:


5

Dois sinais de que os namespaces no PHP estão aqui para ficar:

  1. O esquema de nomeação do PEAR foi abandonado em favor dos espaços para nome no PEAR2 .
  2. Um dos objetivos declarados do Zend Framework 2.0 é ser um exemplo do uso do PHP 5.3 , utilizando totalmente espaços para nome, entre outras coisas. Considero isso uma forte indicação de que o Zend está totalmente comprometido com os namespaces e continuará a apoiá-los e a evoluí-los (espero que melhor).

Concordo plenamente com você que falta a implementação atual dos namespaces, para dizer o mínimo, mas seus argumentos contra o uso deles não são tão sólidos. Mesmo em sua forma atual, os namespaces fornecem:

  • Melhor organização do código,
  • Evitando colisões de nomes,
  • Contexto para classes, funções e constantes.

Lembre-se de que a maioria dos argumentos contra os namespaces do PHP é comparada às implementações em outras linguagens e não contra seus méritos reais como um recurso.


+1 para os links. Você poderia expandir a melhor organização de código e pontos de contexto? É um pouco difícil entender como ele fornece uma melhor organização do código. Parece que a maioria dos projetos segue a classe 1: 1 para arquivar a estrutura agrupada em diretórios lógicos, da mesma forma que você usaria no esquema de nomeação PEAR. Até o ZF2 parece estar usando o mesmo diretório e estruturas de arquivos na maioria dos casos, mas agora com espaços para nome. É diferente, mas não vejo necessariamente como é melhor ou mais organizado do que diretórios e arquivos bem nomeados em primeiro lugar.
VirtuosiMedia

Também tenho problemas com o ponto de contexto. Se alguma coisa, parece que os espaços para nome removem o contexto para ter um estilo de codificação mais sucinto do que adicionar contexto. Como exemplo, se eu instanciar uma nova classe em um arquivo, agora preciso descobrir onde o espaço para nome foi declarado para descobrir qual classe é em vez de tê-la aparente imediatamente a partir do nome da classe. A menos que esteja faltando alguma coisa, parece que os espaços para nome são menos detalhados, mas à custa da clareza.
VirtuosiMedia

@VirtuosiMedia a pêra e os esquemas ZF nomenclatura velhos emular namespaces, então meus três pontos são um pouco verdade para eles também. O que estou tentando ressaltar é que, se esses pontos são verdadeiros na implementação atual dos namespaces PHP, seus pequenos snafus não são suficientes para não usá-los. Com uma melhor organização do código, quero dizer principalmente entre arquivos, adotando uma estrutura e hierarquia sensata e lógica para suas classes, algo que é naturalmente viável sem espaços para nome. Mas os espaços para nome (e os esquemas que os emulam ) são um recurso que ajuda você a atingir os três pontos de uma só vez.
9117 yannis

Peguei vocês. Obrigado pelo esclarecimento. Você vê vantagens significativas para os namespaces reais sobre os namespaces emulados ?
VirtuosiMedia

1
@VirtuosiMedia Todos os pontos para o uso de namespaces feitos na pergunta são válidos. Eu acrescentaria que os namespaces do PHP ajudam seu código a parecer um pouco mais natural para codificadores de diferentes origens, algo que pode ser inestimável em um projeto grande. Além disso, não há um padrão para namespaces emulados , com certeza a maioria deles é a mesma, mas o uso de namespaces reais garante que todos estejam usando o mesmo esquema. BTW, existe um espaçador de nomes que você pode usar para classificar seu código.
yannis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.