Namespaces PHP
Namespaces PHP
Namespaces são qualificadores que resolvem dois problemas diferentes:
- Eles permitem uma melhor organização agrupando classes que trabalham juntas para realizar uma tarefa
- Eles permitem que o mesmo nome seja usado para mais de uma classe
Por exemplo, você pode ter um conjunto de classes que descrevem uma tabela HTML, como Tabela, Linha e Célula, enquanto também possui outro conjunto de classes para descrever móveis, como Mesa, Cadeira e Cama. Os namespaces podem ser usados para organizar as classes em dois grupos diferentes, evitando que as duas classes Table e Table sejam misturadas.
Declarando um namespace
Os namespaces são declarados no início de um arquivo usando a namespace
palavra-chave:
Sintaxe
Declare um namespace chamado Html:
namespace Html;
Nota: Uma namespace
declaração deve ser a primeira coisa no arquivo PHP. O código a seguir seria inválido:
<?php
echo "Hello World!";
namespace Html;
...
?>
Constantes, classes e funções declaradas neste arquivo pertencerão ao namespace Html :
Exemplo
Crie uma classe Table no namespace Html:
<?php
namespace Html;
class Table {
public $title = "";
public
$numRows = 0;
public function message() {
echo "<p>Table
'{$this->title}' has {$this->numRows} rows.</p>";
}
}
$table = new
Table();
$table->title = "My table";
$table->numRows = 5;
?>
<!DOCTYPE html>
<html>
<body>
<?php
$table->message();
?>
</body>
</html>
Para maior organização, é possível ter namespaces aninhados:
Sintaxe
Declare um namespace chamado Html dentro de um namespace chamado Code:
namespace Code\Html;
Como usar namespaces
Qualquer código que segue uma namespace
declaração está operando dentro do namespace, então as classes que pertencem ao namespace podem ser instanciadas sem nenhum qualificador. Para acessar classes de fora de um namespace, a classe precisa ter o namespace anexado a ela.
Exemplo
Use classes do namespace Html:
$table = new Html\Table()
$row = new Html\Row();
Quando muitas classes do mesmo namespace estão sendo usadas ao mesmo tempo, é mais fácil usar a namespace
palavra-chave:
Exemplo
Use classes do namespace Html sem a necessidade do Html\qualifier:
namespace Html;
$table = new Table();
$row = new Row();
Alias de namespace
Pode ser útil dar a um namespace ou classe um alias para facilitar a escrita. Isso é feito com a use
palavra-chave:
Exemplo
Dê um alias a um namespace:
use Html as H;
$table = new H\Table();
Exemplo
Dê um alias a uma classe:
use Html\Table as
T;
$table = new T();