Visão geral de Namespaces
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
O que são namespaces? Na definição mais ampla, os namespaces (na tradução literal, "espaços de nomes") são uma forma de encapsular
itens. Isso é visto como um conceito abstrato em muitos lugares. Por exemplo, em qualquer
sistema operacional, os diretórios servem para agrupar arquivos relacionados, e agem como um namespace para
os arquivos dentro deles. Como um exemplo concreto, o arquivo foo.txt
pode
existir em ambos os diretórios /home/greg
e /home/other
,
mas duas cópias de foo.txt
não podem coexistir em um mesmo diretório. Além
disso, para acessar o arquivo foo.txt
fora do
diretório /home/greg
, o nome do diretório deve ser prefixado ao nome
do arquivo usando o separador de diretórios para obter /home/greg/foo.txt
. Esse
mesmo princípio se estende a namespaces no mundo da programação.
No mundo PHP, os namespaces são projetados para resolver dois problemas que os autores de bibliotecas e aplicações encontram ao criar elementos de código reutilizáveis, como classes ou funções:
- Colisões de nomes entre o código criado e classes/funções/constantes internas do PHP ou classes/funções/constantes de terceiros.
- Capacidade de criar apelidos (ou encurtar) Nomes_Extralongos projetados para aliviar o primeiro problema, melhorando a legibilidade do código-fonte.
Os Namespaces do PHP fornecem uma maneira de agrupar classes, interfaces, funções e constantes relacionadas. Aqui está um exemplo da sintaxe de namespace em PHP:
Example #1 Exemplo da sintaxe de namespace
<?php
namespace meu\nome; // veja a seção "Definindo Namespaces"
class MinhaClasse {}
function minhafuncao() {}
const MINHACONST = 1;
$a = new MinhaClasse;
$c = new \meu\nome\MinhaClasse; // veja a seção "Espaço Global"
$a = strlen('oi'); // veja a seção "Usando namespaces: recorrendo a
// funções/constantes globais"
$d = namespace\MINHACONST; // veja a seção "operador de namespace
// e constante __NAMESPACE__"
$d = __NAMESPACE__ . '\MINHACONST';
echo constant($d); // veja a seção "Namespaces e recursos de linguagem dinâmica"
?>
Note: Nomes de namespace não diferenciam maiúsculas de minúsculas.
Note:
O nome do namespace
PHP
e os nomes compostos que começam com esse nome (comoPHP\Classes
) são reservados para uso interno da linguagem e não devem ser usados no código criado pelo usuário.