@topbytes_tecnologia



O que vem a ser namespace no PHP?


Link: https://adrianosites.com.br/conteudo/o-que-vem-a-ser-namespace-no-php-


O que é o namespace do PHP?

Trata-se de uma forma de organizar  o código das classes e métodos, para evitar colisão destas classes devido a terem o mesmo nome.

Imagine a seguinte situação:
Temos uma classe chamada Login  com seus métodos e tudo mais, para instanciar basta chamar: $login = new Login();  certo? Mas imagine que por qualquer razão tem uma biblioteca que baixou de terceiros que contém uma classe com o mesmo nome Login.

Neste caso vamos imaginar que temos  em nosso projeto, 2 pastas: 1 chamada “classes_minhas” e outras “classes_baixadas”,  neste caso para saber qual classe eu estou usando, logicamente que eu faria os devidos require:

Antes de chamar a classe passaria “require_once (‘classes_minhas/Login.php’)”   por exemplo, e neste caso meu sistema saberia que se trata da minha classe e não de terceiros.

Mas como hoje, não trabalhamos mas com estes sistema de require nas classes, usamos sistemas de autoload e principalmente Composer (que é um gerenciador de dependências do PHP), ai teríamos som problemas. Mesmo que eu mapear as pastas destas classes com o ClassMap no composer.json:

"autoload": {

        "classmap": ["classes_minhas/", "classes_baixadas/"]

    }

 Eu teria este carregamento automatizado, mas como meu projeto, e o próprio PHP, saberiam qual é a classe que estou usando? A minha ou a baixada?

Neste ponto vamos imaginar que eu tenho a estrutura no meu projeto:


Como o mapeamento do Composer vai pegar a classe tanto da pasta minha como a baixada, na hora de executar ele iria tomar como base a primeira encontrada, o que talvez não seria o correto para o momento, pensa que é impossível disso acontecer?

Imagine quando se tem um projeto com muitas classes e muitas bibliotecas de terceiros
Para resolver este problema, podemos usar o sistema de organização por namespace, que já existe a muito tempo, desde o PHP 5.3 se não me engano.

O namespace organiza o acesso a estas pastas tomando como base o diretório onde  elas estão, fica mais simples saber qual é na verdade a classe que estamos chamando

Para isso basta setar um nome para o namespace no começo do arquivo da sua classe:

Esta é a classe Login na pasta “classes_minhas”


Esta é a classe de Login na pasta “classes_baixadas”


Desta maneira, tomando como base a PSR 4,  criamos 2 nomes de espaço , namespace, de forma a organizar as nossas classes:
Namespace “Minhas”  faz referência a pasta “classes_minhas”
Namespace “Baixadas” a pasta “classes_baixadas”

Bastaria agora mapear estas pastas e seus namespaces com ajuda no Composer.

Criamos então a estrutura PSR 4 no composer.json:


Após isso, executando no composer o comando “composer update ” e pronto, já temos o mapeamento, no exemplo já tenho a índex.php pegando o autoload do composer:



Já posso usar agora a classe que eu bem entender.

Para isso temos 2 formas, verifique a de sua preferência:

Forma 1: passando o namespace completo + nome da classe



Forma 2: criando a chamada “use” para adicionar a classe:


Como estou usando o Composer, e ele faz o mapeamento dos namespace, nas 2 formas não preciso chamar diretamente os arquivos com require_once “classes_minhas/login.php”

Pois o Composer já faz o mapeamento e encontra os  arquivos solicitados no projeto. Como podemos ver no arquivo chamado “autoload_psr4.php”  que fica dentro da pasta do composer, em nosso projeto: este arquivo mostrado abaixo é de uso do composer e é ele quem monta e edita, não precisamos alterar nada neste arquivo, mostrado aqui apenas a nivel didático



Lembrando que o namespace, usando a PSR4 não precisa ter o mesmo nome e estrutura das pastas onde se encontra a classe,  o que importa é o nome deste namespace “\\Minhas” e onde ele aponta, que no caso aqui é a pasta “classes_minhas”  como  podemos ver no mapeamento que o composer fez acima;

Espero que tenha ficado claro! Abraço e até a próxima. 

. . . . . . . . . . . . . . . . . . . . .

Listar todas as postagem