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:

  1. Colisões de nomes entre o código criado e classes/funções/constantes internas do PHP ou classes/funções/constantes de terceiros.
  2. 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 (como PHP\Classes) são reservados para uso interno da linguagem e não devem ser usados no código criado pelo usuário.