So do you mean if i want to use a class, i need to do extra two steps?
1) require/include that file
2) use the namespace
What about to add a trigger something like:
function __auto_namespace($names, $class)
{
if ($class === null)
{
set_include_dir(implode('/', $names));
}
else
{
require_once implode('/', $names).'/'.$class.'.php';
}
}
Then when we:
use NAMESPACE1::NAMESPACE2;
or
use NAMESPACE1::NAMESPACE2::CLASS1;
php could auto include the file we needed.
Namespaces
Índice
Namespaces - Visão geral
Namespaces no PHP são projetados para resolver problema de escopo em bibliotecas PHP extensas. No PHP, todas as definições de classes são globais. Assim, quando uma autor de uma biblioteca cria vários utilitários ou públicas classes para uma biblioteca, ele precisa ter cuidado com a possibilidade de outra biblioteca com mesma funcionalidade exista e assim escolher nomes únicos para que estas bibliotecas possam ser usadas juntas. Normalmente isto é resolvido prefixando o nome da classe com uma string única - e.g., classes de banco de dados tem prefixo My_Library_DB, etc. Com o crescimento da biblioteca, mais prefixos são adicionados, criando então nomes grandes.
Os namespaces permitem o desenvolvedor manusear nomes num escopo sem usar nomes grandes cada vez que a classe for referenciada, e resolver o problema de espaço global compartilhado sem fazer um código ilegível.
Namespaces está disponível a partir do PHP 5.3.0. Esta seção é experimental e sujeita a mudanças.
Namespaces
01-Jul-2008 10:19
26-Dec-2007 02:31
So, if I understand correctly there is a possible ambiguity that can cause a function or method to become "masked".
If I have:
global.php:
<?php
class A
{
static public function foo()
{
}
}
A::foo(); // Will statically call method foo() of class ::A.
?>
If I now added the following to my project:
A.php:
<?php
namespace A;
function foo()
{
}
?>
The function call above would instead call this new function.
It shouldn't be a problem most of the time and specially if certain basic practices are followed (For example, don't name classes and namespaces the same name, and always keep different packages in their own separate namespaces), but it's something to keep in mind.
