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) chamada User
para armazenar informações. Os espaços para nome permitem que você crie sua classe em um espaço para nome (digamos MyApp
) e o plug-in use outro espaço para nome (digamos CoolPlugin
). Código dentro do MyApp
espaço pode apenas se referir a User
(por exemplo, new User();
), e também pode codificar no CoolPlugin
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 no CoolPlugin
espaço pode acessar a User
classe MyApp
vianew \MyApp\User();
A alternativa é que toda classe precisa de um nome complexo em qualquer lugar , como class MyApp_User
e class 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.