<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.namespaces.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.namespaces.importing.php',
    1 => 'Aliase und Importieren',
    2 => 'Namespaces verwenden: Aliase/Importieren',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.nsconstants.php',
    1 => 'Schl&uuml;sselwort namespace und __NAMESPACE__',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.global.php',
    1 => 'Globaler Namensraum',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/namespaces.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.namespaces.importing" class="sect1">
  <h2 class="title">Namespaces verwenden: Aliase/Importieren</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   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.
  </p>
  <p class="para">
   PHP unterstützt das Vergeben von Aliasen (Importe) für Konstanten, Funktionen,
   Klassen, Interfaces, Traits, Aufzählungen (Enums) und Namespaces.
  </p>
  <p class="para">
   Ein Alias wird mittels des <code class="literal">use</code>-Operators angelegt. Hier ein
   Beispiel, welches alle fünf Arten von Importen zeigt:
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Aliase/Importieren mit dem use-Operator</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// dies ist das gleiche wie use My\Full\NSname as NSname<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// importiert eine globale Klasse<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">ArrayObject</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Eine Funktion importieren<br /></span><span style="color: #007700">use function </span><span style="color: #0000BB">My\Full\functionName</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Alias für eine Funktion<br /></span><span style="color: #007700">use function </span><span style="color: #0000BB">My\Full\functionName </span><span style="color: #007700">as </span><span style="color: #0000BB">func</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// Eine Konstante importieren<br /></span><span style="color: #007700">use const </span><span style="color: #0000BB">My\Full\CONSTANT</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">namespace\Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse foo\Another<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse My\Full\Classname<br /></span><span style="color: #0000BB">NSname\subns\func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die Funktion My\Full\NSname\subns\func auf<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">ArrayObject</span><span style="color: #007700">(array(</span><span style="color: #0000BB">1</span><span style="color: #007700">)); </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse ArrayObject<br />// ohne das "use ArrayObject" wäre ein Objekt der Klasse foo\ArrayObject erzeugt worden<br /></span><span style="color: #0000BB">func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die Funktion My\Full\functionName auf<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">; </span><span style="color: #FF8000">// Gibt den Wert von My\Full\CONSTANT aus<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   Beachten Sie, dass für Namen von Namespaces (vollständig qualifizierte Namespacenamen
   mit einem Namensraumseparator, wie <code class="literal">Foo\Bar</code>, im Gegensatz zu
   globalen Namen ohne Separator, wie <code class="literal">FooBar</code>) der führende
   Backslash nicht notwendig und nicht empfohlen ist, weil importierte Namen vollständig
   qualifiziert sein müssen und nicht relativ zum aktuellen Namespace verarbeitet
   werden.
  </p>
  <p class="para">
   PHP unterstützt zusätzlich auch eine komfortable Kurzsyntax, mit der mehrere
   use-Ausdrücke in der gleichen Zeile erscheinen können.
   <div class="example" id="example-2">
    <p><strong>Beispiel #2 Aliase/Importieren mit dem use-Operator, mehrere use-Ausdrücke kombiniert</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">, </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse My\Full\Classname<br /></span><span style="color: #0000BB">NSname\subns\func</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die Funktion My\Full\NSname\subns\func auf<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Importieren wird zur Kompilierungszeit ausgeführt und hat daher keinen Einfluss
   auf dynamische Klassen-, Funktions- oder Konstantennamen.
   <div class="example" id="example-3">
    <p><strong>Beispiel #3 Importieren und dynamische Namen</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">, </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse My\Full\Classname<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'Another'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;      </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse Another<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   Zusätzlich beeinflusst das Importieren nur unqualifizierte und qualifizierte
   Namen. Vollständig qualifizierte Namen sind absolut und werden von Importen
   nicht beeinflusst.
   <div class="example" id="example-4">
    <p><strong>Beispiel #4 Importieren und vollständig qualifizierte Namen</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">My\Full\Classname </span><span style="color: #007700">as </span><span style="color: #0000BB">Another</span><span style="color: #007700">, </span><span style="color: #0000BB">My\Full\NSname</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse My\Full\Classname<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Another</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse Another<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">Another\thing</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse My\Full\Classname\thing<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">\Another\thing</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse Another\thing<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <div class="sect2" id="language.namespaces.importing.scope">
   <h3 class="title">Gültigkeitsbereiche für Importe</h3>
   <p class="para">
    Das Schlüsselwort <code class="literal">use</code> muss im äußersten Gültigkeitsbereich
    (dem globalen Gültigkeitsbereich) oder innerhalb einer Namespace-Deklaration
    angegeben werden. Das ist darin begründet, dass Importe zur Kompilierungszeit
    und nicht zur Laufzeit durchgeführt werden und daher nicht in einem anderen
    Gültigkeitsbereich liegen dürfen. Das folgende Beispiel zeigt eine ungültige
    Verwendung des <code class="literal">use</code>-Schlüsselwortes:
   </p>
   <p class="para">
    <div class="example" id="example-5">
     <p><strong>Beispiel #5 Ungültige Importregel</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">Languages</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">toGreenlandic</span><span style="color: #007700">()<br />{<br />    use </span><span style="color: #0000BB">Languages\Danish</span><span style="color: #007700">;<br /><br />    </span><span style="color: #FF8000">// ...<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <p class="para">
     Importregeln sind auf Dateibasis gültig, das heißt eine eingebundene Datei
     wird <em>NICHT</em> die Importregeln der einbindenden Datei erben.
    </p>
   </p></blockquote>
  </div>
  <div class="sect2" id="language.namespaces.importing.group">
   <h3 class="title">Gruppierte <code class="literal">use</code> Deklarationen</h3>
   <p class="para">
    Klassen, Funktionen und Konstanten, die aus dem
    gleichen Namespace importiert werden, in einer einzigen <a href="language.namespaces.importing.php" class="link"><code class="literal">use</code></a>
    Anweisung gruppiert werden.
   </p>
   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">use </span><span style="color: #0000BB">some\namespace\ClassA</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">some\namespace\ClassB</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">some\namespace\ClassC </span><span style="color: #007700">as </span><span style="color: #0000BB">C</span><span style="color: #007700">;<br /><br />use function </span><span style="color: #0000BB">some\namespace\fn_a</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">some\namespace\fn_b</span><span style="color: #007700">;<br />use function </span><span style="color: #0000BB">some\namespace\fn_c</span><span style="color: #007700">;<br /><br />use const </span><span style="color: #0000BB">some\namespace\ConstA</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">some\namespace\ConstB</span><span style="color: #007700">;<br />use const </span><span style="color: #0000BB">some\namespace\ConstC</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// gleichbedeutend zu folgender gruppierter Use-Deklaration<br /></span><span style="color: #007700">use </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ClassA</span><span style="color: #007700">, </span><span style="color: #0000BB">ClassB</span><span style="color: #007700">, </span><span style="color: #0000BB">ClassC </span><span style="color: #007700">as </span><span style="color: #0000BB">C</span><span style="color: #007700">};<br />use function </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">fn_a</span><span style="color: #007700">, </span><span style="color: #0000BB">fn_b</span><span style="color: #007700">, </span><span style="color: #0000BB">fn_c</span><span style="color: #007700">};<br />use const </span><span style="color: #0000BB">some\namespace</span><span style="color: #007700">\{</span><span style="color: #0000BB">ConstA</span><span style="color: #007700">, </span><span style="color: #0000BB">ConstB</span><span style="color: #007700">, </span><span style="color: #0000BB">ConstC</span><span style="color: #007700">};</span></span></code></div>
    </div>

   </div>
  </div>
 </div><?php manual_footer($setup); ?>