PHP 5.3.0alpha2 (cli)
<?php
// namespace MyProject::DB;
require 'db.php';
use MyProject::DB; // fine; same as DB::
use MyProject::DB::Connection as DBC; // fine
use MyProject::DB as HM; // fine
use HM::Connection as DBC2; // class call ends with FATAL!!!
$x = new DBC(); // fine
$y = new HM::Connection(); // fine
$z = new DBC2(); // Fatal error: Class 'HM::Connection' not found
?>
Usando namespaces
Cada classe e função em um namespace pode ser referenciado pelo nome completo - e.g. MyProject::DB::Connection ou MyProject::DB::connect - em algum momento.
Exemplo #1 Usando o nome com namespace
<?php
require 'MyProject/Db/Connection.php';
$x = new MyProject::DB::Connection;
MyProject::DB::connect();
?>
Namespaces podem ser importados para o contexto atual (global ou namespace) usando o operador use. A sintaxe para o operador é:
<?php
/* ... */
use Some::Name as Othername;
// The simplified form of use:
use Foo::Bar;
// which is the same as :
use Foo::Bar as Bar;
?>
O nome importado funciona da seguinte forma: cada vez que o compilador encontra um nome local Othername (o nome sozinho ou com prefixo para nome grande separado por ::) o nome importado Some::Name o substitue.
use pode ser usado somente no escopo global, não dentro de função ou classe. Nomes importados tem efeito a partir do ponto do import até o final do arquivo atual. Ele é recomendado colocá-lo no início do arquivo para evitar confusão.
Exemplo #2 Importando e acessando namespace
<?php
require 'MyProject/Db/Connection.php';
use MyProject::DB;
use MyProject::DB::Connection as DbConnection;
$x = new MyProject::DB::Connection();
$y = new DB::connection();
$z = new DbConnection();
DB::connect();
?>
Nota: A operação import é apenas em tempo de compilação, todos nomes locais são convertidos para seus equivalentes nomes completos pelo compilador. Note que não é traduzido nomes em strings, então callbacks não respeitará regras do import.
Usando namespaces
17-Oct-2008 03:20
27-Mar-2008 06:36
Syntax for extending classes in namespaces is still the same.
Lets call this Object.php:
<?php
namespace com::rsumilang::common;
class Object{
// ... code ...
}
?>
And now lets create a class called String that extends object in String.php:
<?php
class String extends com::rsumilang::common::Object{
// ... code ...
}
?>
Now if you class String was defined in the same namespace as Object then you don't have to specify a full namespace path:
<?php
namespace com::rsumilang::common;
class String extends Object
{
// ... code ...
}
?>
Lastly, you can also alias a namespace name to use a shorter name for the class you are extending incase your class is in seperate namespace:
<?php
namespace com::rsumilang::util;
use com::rsumlang::common as Common;
class String extends Common::Object
{
// ... code ...
}
?>
- Richard Sumilang

Definição de Namespace