Quando você usa classes de bibliotecas diferentes (ou mesmo classes de componentes diferentes de uma única biblioteca)
no seu programa, os nomes das classes podem entrar em conflito.
Isso significa que você pode encontrar duas classes com o mesmo nome, resultando em um erro no PHP.
Se você já programou sites com o Zend Framework 1, talvez se lembre daqueles extra longos
nomes de classes como Zend_Controller_Abstract
. A ideia com nomes longos era
utilizado para evitar colisões de nomes entre diferentes componentes. Cada componente definido
seu próprio prefixo de nome, como Zend_
ou My_
.
O Zend Framework 3 usa um recurso do PHP chamado namespaces. Os namespaces permitem resolver colisões de nomes entre componentes de código.
Um namespace é um contêiner para um grupo de nomes. Você pode aninhar namespaces uns nos outros.
Se uma classe não define um namespace, ele vive dentro do namespace global
(por exemplo, as classes PHP Exception
e DateTime
pertencem ao namespace global).
Veja um exemplo real da definição de namespace (tirada do componente Zend\Mvc
):
<?php
namespace Zend\Mvc;
/**
* Main application class for invoking applications.
*/
class Application
{
// ... class members were omitted for simplicity ...
}
No Zend Framework 3, todas as utilizam o namespace Zend.
A linha 2 define o namespace Mvc, que é aninhado no namespace Zend,
e todas as classes (incluindo a classe Application
mostrada
neste exemplo nas linhas 7-10) pertence a este namespace Zend. O nome do namespace é
separado com o caractere de barra invertida ('\').
Em outras partes do código, você referência à classe Application
usando
seu nome:
<?php
$application = new \Zend\Mvc\Application();
Por favor, note a barra invertida em
\Zend\Mvc\Application
. Quando você especificar um nome de classe com barras invertidas, que está acessando caminho diretamente da classe. Também é possível especificar o nome da classe ao namespace atual, nesse caso você não usar a barra invertida inicial.
Também é possível usar um alias (nome abreviado da classe) com o
ajuda da declaração use
do PHP:
<?php
// Define um alias no inicio do arquivo.
use Zend\Mvc\Application;
// Posteriormente em seu código você pode usar o nome abreviado da classe.
$application = new Application();
Embora o alias permita usar um nome curto em vez do nome completo, seu uso é opcional. Você não é obrigado a usar sempre aliases e pode referenciar a classe pelo seu nome completo.
Cada arquivo PHP da sua aplicação geralmentevai definir o namespace (exceto index.php script de entrada e arquivos de configuração). Por exemplo, o módulo principal do seu site, o módulo Application, define seu próprio namespace cujo nome é igual ao nome do módulo:
<?php
namespace Application;
class Module
{
// ... class members were omitted for simplicity ...
}