Recentemente, comecei a usar namespaces em PHP. Quando os vi pela primeira vez, achei que a sintaxe deles era feia e eu nunca os usaria. No entanto, criei um carregador automático (spl_autoload_register) que faz com que eu nunca precise escrever uma instrução de inclusão / necessidade novamente.
Gosto de espaços para nome, mas há algum benefício objetivo sobre as instruções de inclusão / exigência ou elas são exatamente o mesmo método para atingir o mesmo objetivo?
new \Vendor\Namespace\Class()
sem uma declaração de solicitação anteriormente no método ou classe.Respostas:
Os espaços para nome não são apenas para o carregamento automático de classes. Eles também evitam conflitos de nomes. De fato, esse é o objetivo principal.
Digamos que você tenha um projeto que precise de uma classe chamada
User
, para armazenar informações sobre os usuários do seu aplicativo, mas um plug-in também usa uma classe (diferente) chamadaUser
para armazenar informações. Os espaços para nome permitem que você crie sua classe em um espaço para nome (digamosMyApp
) e o plug-in use outro espaço para nome (digamosCoolPlugin
). Código dentro doMyApp
espaço pode apenas se referir aUser
(por exemplo,new User();
), e também pode codificar noCoolPlugin
espaço; cada um obterá o resultado esperado. Quando você precisar usar o código de outro espaço para nome, basta prefixá-lo. Por exemplo, o código noCoolPlugin
espaço pode acessar aUser
classeMyApp
vianew \MyApp\User();
A alternativa é que toda classe precisa de um nome complexo em qualquer lugar , como
class MyApp_User
eclass CoolPlugin_User
. Os espaços para nome permitem simplificar as coisas na maioria das vezes e evitar conflitos de nomes o tempo todo.Editar: Para responder à pergunta "Existe alguma diferença de desempenho entre os dois?"
Não é significativo, não. Não fiz comparações, mas provavelmente há uma diferença no nível de nanossegundos. Dito isso, sacrificar a qualidade do código por ajustes de desempenho super pequenos não é uma boa estratégia; portanto, você deve usar espaços para nome independentemente. Para referências de problemas semelhantes, consulte PHPbench.com e esta resposta StackOverflow .
Seu código precisa ser incrivelmente rígido e extremamente sensível ao tempo (pense em negociações de alta frequência ou no gerenciamento de reações nucleares) antes que você precise se preocupar em otimizar o micro neste tipo de contexto. Se realmente é sensível ao tempo, você provavelmente deve codificar em c ou mesmo assembly , não linguagens interpretadas como PHP.
fonte