PHP
downloads | documentation | faq | getting help | mailing lists | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Der globale Namensraum> <Deklaration von Namensräumen
Last updated: Fri, 14 Nov 2008

view this page in

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;
?>
Der importierter Name funktioniert folgendermaßen: jedesmal wenn der Compiler auf den Namen Othername trifft (entweder alleine oder als mit :: abgetrennter Vorspann eines längeren Namens so wird stattdessen der importierte Name Some::Name eingesetzt.

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.



add a note add a note User Contributed Notes
Nutzung von Namensräumen
kukoman at pobox dot sk
17-Oct-2008 11:20
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
?>
richard at richard-sumilang dot com
27-Mar-2008 02: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

Der globale Namensraum> <Deklaration von Namensräumen
Last updated: Fri, 14 Nov 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites