Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Manoel Barros

namespace

Recommended Posts

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();

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
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:

use \Library\Db\Sql AS SqlDatabase;

$sql = new SqlDatabase();
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.