Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal, uma dúvida sobre namespace:
Quando estiver usando namespace nos meu projetos
devo usar o use, para minimizar o tamanho dos nomes para instanciar:
use \Library\Db\Sql;
$sql = new Sql(); ou usar o nome completo, como foi nomeado namespace nas classes, já direto:
$sql = new \Library\Db\Sql();Uma duvida também..
Eu posso chamar duas namespace no mesmo arquivo ?
esses dias eu estava modificando meu sistema e apareceu um erro justamente quando tentei algo
do tipo ;)
Você pode importar quantos namespaces quiser e até ter mais de um namespace por arquivo.
Importar mais de um namespace por arquivo não tem nenhuma restrição e deve ser feito sempre que necessário. O que não pode acontecer é o seguinte:
namespace MyLibrary;
use MyNamespace\Tools;
use OtherNamespace\Tools;
No código acima, há um conflito, veja só:
namespace MyLibrary;
use MyNamespace\Tools as Tools;
use OtherNamespace\Tools as Tools;
O código acima é a interpretação dos namespaces e esses conflitos devem ser corrigidos, podendo utilizar alias:
namespace MyLibrary;
use MyNamespace\Tools;
use OtherNamespace\Tools as OtherTools;
E o código pode ser executado da seguinte forma:
namespace MyLibrary;
use MyNamespace\Tools;
use OtherNamespace\Tools as OtherTools;
$tools = new Tools;
$otherTools = new OtherTools;
Já a questão de ter mais de um namespace por arquivo acaba se tornando uma má prática do ponto de vista de empacotamento e pode bagunçar o autoload.
A questão de autoload é um problema menor, como pode ser visto nesse tópico.
Já a questão de namespace, vai contra a PSR-4, que define um <vendor name> seguido do <namespace> e, pode haver, <subnamespace>. Tudo além do <vendor name> deve ser uma pasta. Logo, não faz sentido ter dois namespaces no mesmo arquivo dentro de um pacote.
Já para fins de estudos, testes e demonstração, utilizar mais de um namespace em um único arquivo é totalmente válido.
Obrigado.. depois dessa explicação vou ter que modificar meu sistema..
Então acho que vou ter que modificar isso para não perder desempenho do sistema.
A importação de um namespace é justamente para manter a clareza do código e evitar extensos nomes no meio do código. Dessa forma, faz parte da organização utilizar use.
Mas, além da importação, você pode utilizar alias (apelidos) para deixar seu código ainda mais claro.
Por exemplo, isso:
use \Library\Db\Sql;
é igual a isso:
use \Library\Db\Sql as Sql;
Além de manter a clareza do código, você pode aumentar a coerência do que cada classe faz em seu script, além dos "nomes/alias" das classes serem autoexplicativos.Mas digamos que só a classe Sql não faça muito sentido no meu código, não sei se é um connector para base de dados SQL ou um gerador de consultas SQL, preciso complementar o nome dela: