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
?>
Nutzung von Namensräumen
Jede Klasse und Funktion in einem Namensraum kann jederzeit über ihren vollständigen Namen angesprochen werden, z.B. MyProject::DB::Connection oder MyProject::DB::connect.
Beispiel #1 Nutzung vollständiger Namen incl. Namensraum
<?php
require 'MyProject/Db/Connection.php';
$x = new MyProject::DB::Connection;
MyProject::DB::connect();
?>
Namensräume können mit Hilfe des use-Schlüsselwortes in den aktuellen Kontext (entweder den aktuellen oder globalen Namensraum) importiert werden. Die Syntax hierfür ist:
<?php
/* ... */
use Some::Name as Othername;
// Die vereinfachte Form:
use Foo::Bar;
// Diese entpricht:
use Foo::Bar as Bar;
?>
use kann nur im globalen Kontext und nicht innerhalb einer Funktion oder Klasse benutzt werden. Importierte Namen sind von der Stelle des Imports bis zum Ende der Datei aktiv. Um Verwirrungen zu vermeiden wird empfohlen Imports an den Dateianfang zu setzen.
Beispiel #2 Import und Nutzung von Namensräumen
<?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();
?>
Hinweis: Die Importoperation wird nur während des Kompilierens ausgeführt, alle lokalen Namen werden dabei vom Kompiler in ihre vollständigen Entsprechungen umgewandelt. Beachten Sie das Namen innerhalb von Strings nicht umgewandelt werden, Callback-Aufrufe können sich daher nicht auf Importregeln verlassen.
Nutzung von Namensräumen
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
