PHP Doku:: Namespaces verwenden: Importieren/Aliase - language.namespaces.importing.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchSprachreferenzNamespacesNamespaces verwenden: Importieren/Aliase

Ein Service von Reinhard Neidl - Webprogrammierung.

Namespaces

<<Namespace-Schlüsselwort und __NAMESPACE__-Konstante

Globaler Namensraum>>

Namespaces verwenden: Importieren/Aliase

Die Möglichkeit, auf vollständig qualifizierte Namen mit einem Alias (Importieren) zuzugreifen, ist ein wichtiges Feature von Namespaces. Dies ist ähnlich wie die Möglichkeit von Unix-basierten Dateisystemen einen symbolischen Link auf eine Datei oder ein Verzeichnis anzulegen.

PHP-Namespaces unterstützen zwei Arten von Aliasen oder Importen: Einen Alias für einen Klassennamen und einen Alias für einen Namespace. Beachten Sie, dass das importieren einer Funktion oder Konstanten nicht unterstützt wird.

Ein Alias wird in PHP mittels des use-Operators angelegt. Hier ein Beispiel, welches alle drei Arten von Importen zeigt:

Beispiel #1 Importieren/Aliase mit dem use-Operator

<?php
namespace foo;
use 
My\Full\Classname as Another;

// dies ist das gleiche wie use My\Full\NSname as NSname
use My\Full\NSname;

// importiert eine globale Klasse
use \ArrayObject;

$obj = new namespace\Another// erzeugt ein Objekt der Klasse foo\Another
$obj = new Another// erzeugt ein Objekt der Klasse My\Full\Classname
NSname\subns\func(); // ruft die Funktion My\Full\NSname\subns\func auf
$a = new ArrayObject(array(1)); // erzeugt ein Objekt der Klasse ArrayObject
// ohne das "use \ArrayObject" wäre ein Objekt der Klasse foo\ArrayObject erzeugt worden
?>
Beachten Sie, dass für Namen von Namespaces (vollständig qualifizierte Namespacenamen mit einem Namensraumseparator, wie Foo\Bar, im Gegensatz zu globalen Namen ohne Separator, wie FooBar) der führende Backslash nicht notwendig und nicht erlaubt ist, weil importierte Namen vollständig qualifiziert sein müssen und nicht relativ zum aktuellen Namespace verarbeitet werden.

PHP unterstützt zusätzlich auch eine komfortable Kurzsyntax, mit der mehrere use-Ausdrücke in der gleichen Zeile erscheinen können.

Beispiel #2 Importieren/Aliase mit dem use-Operator, mehrere use-Ausdrücke kombiniert

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// erzeugt ein Objekt der Klasse My\Full\Classname
NSname\subns\func(); // ruft die Funktion My\Full\NSname\subns\func auf
?>

Importieren wird zur Kompilierungszeit ausgeführt und hat daher keinen Einfluss auf dynamische Klassen-, Funktions- oder Konstantennamen.

Beispiel #3 Importieren und dynamische Namen

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// erzeugt ein Objekt der Klasse My\Full\Classname
$a 'Another';
$obj = new $a;      // erzeugt ein Objekt der Klasse Another
?>

Zusätzlich beeinflusst das Importieren nur unqualifizierte und qualifizierte Namen. Vollständig qualifizierte Namen sind absolut und werden von Importen nicht beeinflusst.

Beispiel #4 Importieren und vollständig qualifizierte Namen

<?php
use My\Full\Classname as AnotherMy\Full\NSname;

$obj = new Another// erzeugt ein Objekt der Klasse My\Full\Classname
$obj = new \Another// erzeugt ein Objekt der Klasse Another
$obj = new Another\thing// erzeugt ein Objekt der Klasse My\Full\Classname\thing
$obj = new \Another\thing// erzeugt ein Objekt der Klasse Another\thing
?>


3 BenutzerBeiträge:
- Beiträge aktualisieren...
Jan Tvrdk
11.01.2011 15:26
Importing and aliasing an interface name is also supported.
thinice at gmail.com
2.12.2010 7:07
Because imports happen at compile time, there's no polymorphism potential by embedding the use keyword in a conditonal.

e.g.:

<?php
if ($objType == 'canine') {
  use
Animal\Canine as Beast;
}
if (
$objType == 'bovine') {
  use
Animal\Bovine as Beast;
}

$oBeast = new Beast;
$oBeast->feed();
?>
nsdhami at live dot jp
15.07.2010 11:01
The "use" keyword can not be declared inside the function or method. It should be declared as global, after the "namespace" as:

<?php

namespace mydir;

// works perfectly
use mydir/subdir/Class1 as Class1;

function
fun1()
{
   
// Parse error: syntax error, unexpected T_USE
   
use mydir/subdir/Class1 as Class1;
}

class
Class2
{
    public function
fun2()
    {
       
// Parse error: syntax error, unexpected T_USE
       
use mydir/subdir/Class1 as Class1;
    }
}
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)