Um novo recurso importante no PHP 5.3 são os namespaces.
Este recurso foi proposto no PHP5.0x, mas posteriormente foi cancelado e programado para ser implementado no PHP6. E desta vez, o PHP5.3 foi lançado novamente “antes do previsto”, o que mostra que os desenvolvedores atribuem grande importância a ele e são cautelosos.
Quando lançado oficialmente, o conteúdo do documento pode estar desatualizado (a documentação pode estar desatualizada), então aqui está uma breve explicação do uso do namespace: primeiro, declare um namespace e adicione a nova palavra-chave namespace, que deve estar em o início do arquivo de classe
<?phpnamespace Project::Module;class User {const STATUS_OK = true;function register($data) {...}...} Então no controlador (talvez outros arquivos) você pode chamar
$ user = new assim Project::Module::User();$user->register($register_info); é de fato o mesmo de sempre, mas podemos conectar duas classes independentes. Por exemplo,
Project::Module::User;Project::Module::Blog Isso torna mais fácil descrever e entender o relacionamento entre variáveis e classes da própria linguagem, evitando assim o método de nomenclatura "tradicional" longo de Project_Module_Blog .
A descrição acima pode ser difícil de explicar os benefícios do uso de namespaces. O uso recém-adicionado e como palavras-chave podem explicar melhor o problema. As instruções use e as podem referenciar e declarar "aliases" de namespace. Por exemplo, o código para instanciar a classe no controlador acima pode ser escrito assim:
use Project::Module;$user = new Module::User();$user->register($register_info)
; ::Module:: User as ModuleUser;$user = new ModuleUser;$user->register($register_info);Constantes na classe também podem ser acessadas através do namespace. namespace
Projeto::Module::User: :STATUS_OK acesso. Além disso, você também pode usar aliases para simplificar esses "nomes de variáveis" longos.
Use Project::Module::User::STATUS_OK as STATUS_OK;echo STATUS_OK A propósito, o conceito de "The Global Namespace". O chamado "hiperespaço" refere-se a variáveis, classes e funções que não possuem um namespace designado. Por exemplo
, uma função como function foo() {...} pode ser executada usando foo() ou ::foo();.
Finalmente, use a função autoload para carregar a classe no namespace especificado. A função simples é a seguinte:
function __autoload( $classname ) {$classname = strtolower( $classname );$classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );require_once( dirname( __FILE__ ) . '/' . $ classname . '.class.php' );} Desta forma, por exemplo, chamar
__autoload('Project::Module::User'); pode carregar automaticamente o arquivo Project_Module_User.class.php (embora isso pareça inconveniente).