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
?>
Употреба на пространства от имена
Към всеки клас или функция, намиращи се в пространство от имена, може да се извърши обръщение посредством пълно име - например MyProject::DB::Connection или MyProject::DB::connect, по всяко време.
Example #1 Употреба на име с пространство от имена
<?php
require 'MyProject/Db/Connection.php';
$x = new MyProject::DB::Connection;
MyProject::DB::connect();
?>
Пространствата от имена могат да бъдат внасяни в глобален контекст или в контекста на дадено пространство от имена посредством оператора use. Синтаксисът за този оператор е:
<?php
/* ... */
use Some::Name as Othername;
// Опростената употреба:
use Foo::Bar;
// което е същото като :
use Foo::Bar as Bar;
?>
use може да се използва само в глобалната област на действие, но не и във функция или клас. Внесените имена имат област на действие от точката на внасяне до края на текущия файл. Препоръчително е внасянията да се поставят в началото на файла, за да се избегнат обърквания.
Example #2 Внасяне и осъществяване на достъп до пространство от имена
<?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();
?>
Забележка: Операцията по внасяне се изпълнява само по време на компилация, всички локални имена се преобразуват до пълните им еквиваленти от компилатора. Забележете, че имената в низове няма да бъдат преобразувани, така че обратните извиквания не могат да разчитат на тези правила за вмъкване.
Употреба на пространства от имена
17-Oct-2008 09:20
27-Mar-2008 11: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
