Na hierarquia da Programação Orientada a Objetos (POO), o Namespace é a estrutura de maior nível hierárquico dentre todas as outras. Ela encapsula todas as outras entidades. Neste artigo, você vai aprender a usar essa entidade tão importante na programação.
Mas, qual a vantagem de usar uma namespace? A principal vantagem é a organização do código. O código fica mais intuitivo se você tiver uma palavra que possa se lembrar quando quiser acessar um conjunto de funções do seu projeto. Além disso, os nomes de funções e classes ficarão atrelados à namespace que eles pertencem. Assim, você poderá repeti-los em outras partes do código.
Já que essa há essa grande vantagem ao usar namespaces, vamos ver agora como declarar essas estruturas.
Para entender melhor esse assunto, o vídeo abaixo vai resumir uma parte deste conteúdo e mostrar na prática como usar Namespaces em PHP. Em seguida, volte e termine a leitura deste artigo para compreender os detalhes.
Para declarar namespaces, você deve usar a palavra-chave namespace
seguida do nome da sua namespace. Esse nome segue as mesmas regras para se declarar variáveis e outras estruturas do PHP. Observe o código abaixo:
namespace minha_namespace {
function get_var_a ( ) {
return $variavel_a = 80 ;
}
// outras classes, funções e variáveis
}
Aqui, nós temos a namespace minha_namespace
declarada corretamente com a palavra-chave e o nome que a indentifica. Assim como acontece com funções e classes, basta inserir o conteúdo da sua namespace entre as chaves.
Vou citar aqui outras regras importantes ao usar namespaces em PHP.
Regra 1. Declarar a namespace deve ser a primeira linha de código do seu script. Com exceção de comentários, não pode haver nada antes da declaração de uma namespace. Veja o exemplo abaixo:
// inicio do arquivo
$variavel_a = 80 ;
namespace minha_namespace {
function get_var_b ( ) {
return $variavel_b = $variavel_a + 40 ;
}
}
// fim do arquivo
No código acima, ocorrerá um erro porque variavel_a
foi declarada antes da namespace. O correto é assim:
// inicio do arquivo
namespace minha_namespace {
function get_var_b ( ) {
$variavel_a = 80 ;
return $variavel_b = $variavel_a + 40 ;
}
} // fim do arquivo
Agora, o código está correto, porque não há nada acima da declaração da namespace a não ser um comentário, que não surte efeitos no código.
Regra 2. Como o PHP trabalha com vários scripts, é permitido apenas 1 namespace por script. Sendo assim, observe o código abaixo:
Arquivo_1.php:
namespace minha_namespace {
function get_var_a ( ) {
return $variavel_a = 80 ;
}
// outras classes, funções e variáveis
}
namespace minha_segunda_namespace {
function get_var_b ( ) {
return $variavel_b = 40 ;
}
// outras classes, funções e variáveis
}
Esse script resultará em erro e o seu código não funcionará. É necessário separar as namespaces em vários arquivos da seguinte forma:
Arquivo_1.php:
namespace minha_namespace {
function get_var_a ( ) {
return $variavel_a = 80 ;
}
// outras classes, funções e variáveis
} // fim do Arquivo 1
Arquivo_2.php:
namespace minha_segunda_namespace {
function get_var_b ( ) {
return $variavel_b = 40 ;
}
// outras classes, funções e variáveis
} // fim do Arquivo 2
Esse código não resultará em erros porque as namespaces foram declaradas em arquivos diferentes.
Regra 3. Se você declarar uma namespace num arquivo, não é permitido declarar nada fora do escopo da namespace. Veja o código abaixo:
Arquivo_1.php:
namespace minha_namespace {
function get_var_a ( ) {
return $variavel_a = 80 ;
}
// outras classes, funções e variáveis
}
$variavel_b = 40 ;
O código acima causará um erro, porque $variavel_b
foi declarada fora do escopo de minha_namespace
. O correto é encerrar o arquivo na chave de fechamento da namespace.
Regra 4: É permitido aninhar várias namespaces, ou seja, colocar uma dentro da outra. Para fazer isso, basta separar as namespaces com uma barra da seguinte forma:
namespace namespace_1\namespace_2\namespace_3 {
function get_var_b ( ) {
return $variavel_b = 40 ;
}
// outras classes, funções e variáveis
}
No código acima, estamos declarando o conteúdo de namespace_3
, que está dentro de namespace_2
e que está dentro de namespace_1
. Note que não há necessidade de declarar as namespaces uma dentro da outra. Basta digitar a hierarquia desejada como mostrado.
Outras maneiras de usar namespace
E se caso você desejar dividir 1 namespace em vários arquivos? Nessa situação, basta repetir a declaração da namespace em cada um dos arquivos. Veja o exemplo abaixo:
Arquivo 1.php:
namespace minha_namespace {
function get_var_a ( ) {
return $variavel_a = 80 ;
}
}
Arquivo 2.php:
namespace minha_namespace {
function get_var_b ( ) {
return $variavel_b = 40 ;
}
}
No exemplo acima, a minha_namespace
começou a ser declarada em Arquivo 1.php
e seu conteúdo continuou em Arquivo 2.php
. Dessa forma, tanto $variavel_a
quanto $variavel_b
ficarão acessíveis através da mesma namespace e não haverá erros.
Isso significa que, quando o PHP vê que foram declaradas a mesma namespace em 2 arquivos diferentes, ele conjuga todas as declarações dos 2 arquivos dentro de uma única namespace.
Outra coisa para você saber é que não é necessário usar chaves { }
para declarar uma namespace. Você também pode fazer isso usando ponto-e-vírgula ;
da seguinte forma:
namespace minha_namespace ;
function get_var_a ( ) {
return $variavel_a = 80 ;
}
// fim do arquivo
No exemplo, minha_namespace
foi declarada corretamente. Todo o conteúdo abaixo dessa linha será considerado como dentro da namespace.
E para acessar o conteúdo de uma namespace? Só é possível acessar classes, funções e enumeradores dentro de uma namespace, e essas estruturas te darão acesso às respectivas propriedades. No caso, basta fazer como mostra o código abaixo:
Arquivo_1.php:
namespace minha_namespace ;
function get_var_a ( ) {
return $variavel_a = 80 ;
}
// fim do Arquivo 1
Arquivo_2.php:
namespace segunda_namespace ;
function get_var_b ( ) {
return $variavel_b = 40 ;
}
// fim do Arquivo 2
Arquivo_3.php:
echo minha_namespace->get_var_a ( ) ;
echo segunda_namespace->get_var_b ( ) ;
Como você pode observar, o Arquivo_1.php
possui a namespace minha_namespace
. Nessa namespace há a função get_var_a ( )
que retorna a variavel_a
que tem o valor 80
. o Arquivo_2.php
possui uma estrutura semelhante.
Já em Arquivo_3.php
, foram invocadas as funções dentro das namespaces dos arquivos 1 e 2. Para fazer isso, usou-se o sinal ->
que invoca um método dentro de uma entidade.
Conclusão
Acredito que isso seja tudo que você precisará saber sobre namespaces para começar a usá-las. Se este é o seu primeiro contato com a Programação Orientada a Objetos, com certeza será mais desafiador entender este artigo. Em breve, haverá novos artigos que explicarão cada uma das estruturas mencionadas aqui.