<?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.faq.php',
    1 => 'FAQ',
    2 => 'FAQ: Dinge, die Sie &uuml;ber Namespaces wissen sollten',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.rules.php',
    1 => 'Regeln f&uuml;r Namensaufl&ouml;sung',
  ),
  'next' => 
  array (
    0 => 'language.enumerations.php',
    1 => 'Aufz&auml;hlungen (Enum)',
  ),
  '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.faq" class="sect1">
  <h2 class="title">FAQ: Dinge, die Sie über Namespaces wissen sollten</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="para">
   Diese häufig gestellten Fragen (FAQ) wurden in zwei Abschnitte aufgeteilt:
   allgemeine Fragen und einige Implementierungsdetails, deren
   vollständiges Verständnis hilfreich sein kann.
  </p>
  <p class="para">
   Zuerst die allgemeinen Fragen.
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shouldicare" class="link">Wenn ich keine Namespaces
       verwende, sollte mich das alles hier überhaupt interessieren?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.globalclass" class="link">Wie verwende ich interne
       oder globale Klassen in einem Namespace?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.innamespace" class="link">Wie verwende ich Klassen,
       Funktionen oder Konstanten mit Namespaces in ihrem eigenen Namespace?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.full" class="link">
       Wie wird ein Name wie <code class="literal">\mein\name</code> oder
       <code class="literal">\name</code> aufgelöst?
      </a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.qualified" class="link">Wie wird ein Name
       wie <code class="literal">mein\name</code> aufgelöst?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shortname1" class="link">Wie wird ein
       unqualifizierter Name wie <code class="literal">name</code> aufgelöst?</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.shortname2" class="link">Wie wird ein
       unqualifizierter Funktions- oder Konstantenname wie
       <code class="literal">name</code> aufgelöst?</a>
     </span>
    </li>
   </ol>
  </p>
  <p class="para">
   Es gibt einige Implementierungsdetails von Namespaces, deren
   Verständnis hilfreich ist.
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.conflict" class="link">Importierte Namen
       dürfen keine Konflikte mit Klassennamen in der gleichen Datei erzeugen.</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.nested" class="link">Verschachtelte
       Namespaces sind nicht erlaubt.</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.quote" class="link">Dynamische Namespacenamen
       sollten den Backslash escapen.</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.constants" class="link">Zugriff auf
       undefinierte Konstanten mit Backslashes beendet das Skript mit
       einem fatal error.</a>
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      <a href="language.namespaces.faq.php#language.namespaces.faq.builtinconst" class="link">Die speziellen Konstanten
      <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> und <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> können nicht überschrieben werden.</a>
     </span>
    </li>
   </ol>
  </p>
  <div class="sect2" id="language.namespaces.faq.shouldicare">
   <h3 class="title">Wenn ich keine Namespaces verwende, sollte mich das alles
    hier überhaupt interessieren?</h3>
   <p class="para">
    Nein. Namespaces haben keinerlei Einfluss auf bereits bestehenden Code
    oder irgendwelchen Code der noch geschrieben wird, der keine Namespaces
    verwendet. Sie können folgenden Code schreiben, wenn Sie dies wünschen:
   </p>
   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Beispiel #1 Zugriff auf globale Klassen außerhalb eines Namespace</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Dies ist äquivalent zu:
   </p>
   <p class="para">
    <div class="example" id="example-2">
     <p><strong>Beispiel #2 Zugriff auf globale Klassen außerhalb eines Namespace</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">stdClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.globalclass">
   <h3 class="title">Wie verwende ich interne oder globale Klassen in einem Namespace?</h3>
   <p class="para">
    <div class="example" id="example-3">
     <p><strong>Beispiel #3 Zugriff auf interne Klassen in Namespaces</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 /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\stdClass</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">\ArrayObject $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\DirectoryIterator</span><span style="color: #007700">::</span><span style="color: #0000BB">CURRENT_AS_FILEINFO</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// erben von einer internen oder globalen Klasse<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">\Exception </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.innamespace">
   <h3 class="title">
    Wie verwende ich Klassen, Funktionen oder Konstanten mit Namespaces
    in ihrem eigenen Namespace?
   </h3>
   <p class="para">
    <div class="example" id="example-4">
     <p><strong>Beispiel #4 Zugriff auf interne Klassen, Funktionen oder Konstanten in Namespaces</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 /><br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br /><br /></span><span style="color: #FF8000">// verwendet eine Klasse des aktuellen Namensraumes als Parametertyp<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">MyClass $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /></span><span style="color: #FF8000">// eine andere Möglichkeit, eine Klasse des aktuellen Namensraums<br />// als Parametertyp zu verwenden<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">(</span><span style="color: #0000BB">\foo\MyClass $parameter_type_example </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">) {}<br /><br /></span><span style="color: #FF8000">// ableiten von einer Klasse aus dem aktuellen Namespace<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Extended </span><span style="color: #007700">extends </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br /><br /></span><span style="color: #FF8000">// Zugriff auf eine globale Funktion<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\globalfunc</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Zugriff auf eine globale Konstante<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.full">
   <h3 class="title">
    Wie wird ein Name wie <code class="literal">\mein\name</code> oder
    <code class="literal">\name</code> aufgelöst?
   </h3>
   <p class="para">
    Namen, die mit einem <code class="literal">\</code> beginnen, werden immer
    zu exakt dem aufgelöst wie sie aussehen. <code class="literal">\mein\name</code>
    ist also tatsächlich <code class="literal">\mein\name</code> und
    <code class="literal">\Exception</code> ist <code class="literal">Exception</code>.
    <div class="example" id="example-5">
     <p><strong>Beispiel #5 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">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">\my\name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse "my\name"<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">\strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hi'</span><span style="color: #007700">); </span><span style="color: #FF8000">// ruft die Funktion "strlen" auf<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// $a wird auf den Wert der Konstante "INI_ALL" gesetzt<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.qualified">
   <h3 class="title">Wie wird ein Name wie <code class="literal">mein\name</code> aufgelöst?</h3>
   <p class="para">
    Namen, die einen Backslash beinhalten, aber nicht mit einem Backslash
    beginnen, wie z. B. <code class="literal">mein\name</code>, können auf zwei
    verschiedene Arten aufgelöst werden.
   </p>
   <p class="para">
    Falls es einen Import-Ausdruck gibt, der einen Alias für einen anderen Namen
    definiert, so dass dieser <code class="literal">mein</code> heißen soll, dann wird dieser
    Alias für das <code class="literal">mein</code> in <code class="literal">mein\name</code> angewandt.
   </p>
   <p class="para">
    Andernfalls wird der aktuelle Namespace vor <code class="literal">mein\name</code>
    vorangestellt.
   </p>
   <p class="para">
    <div class="example" id="example-6">
     <p><strong>Beispiel #6 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">namespace </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">my\name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse "foo\my\name"<br /></span><span style="color: #0000BB">foo\bar</span><span style="color: #007700">::</span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die statische Methode "name"<br />                 // der Klasse "blah\blah\bar" auf<br /></span><span style="color: #0000BB">my\bar</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die Funktion "foo\my\bar" auf<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">my\BAR</span><span style="color: #007700">; </span><span style="color: #FF8000">// setzt $a auf den Wert der Konstante "foo\my\BAR"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.shortname1">
   <h3 class="title">Wie wird ein unqualifizierter Name wie <code class="literal">name</code> aufgelöst?</h3>
   <p class="para">
    Klassennamen, die keinen Backslash beinhalten, wie z. B.
    <code class="literal">name</code>, können auf zwei Arten aufgelöst werden.
   </p>
   <p class="para">
    Falls es einen Import-Ausdruck gibt, der einen Alias für einen anderen Namen
    definiert, so dass dieser <code class="literal">name</code> heißen soll, dann wird dieser
    Alias angewandt.
   </p>
   <p class="para">
    Andernfalls wird der aktuelle Namespace <code class="literal">name</code> vorangestellt.
   </p>
   <p class="para">
    <div class="example" id="example-7">
     <p><strong>Beispiel #7 Unqualifizierter Klassennamen</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">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse "foo\name"<br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">::</span><span style="color: #0000BB">name</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die statische Methode "name" der Klasse "blah\blah" auf<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.shortname2">
   <h3 class="title">
    Wie wird ein unqualifizierter Funktions- oder Konstantenname wie
    <code class="literal">name</code> aufgelöst?
   </h3>
   <p class="para">
    Funktions- oder Konstantennamen, die keinen Backslash beinhalten,
    wie z. B. <code class="literal">name</code>, können auf zwei verschiedene
    Arten aufgelöst werden.
   </p>
   <p class="para">
    Zuerst wird der aktuelle Namespace dem <code class="literal">name</code> vorangestellt.
   </p>
   <p class="para">
    Wenn die Konstante oder Funktion <code class="literal">name</code> im aktuellen
    Namensraum nicht existiert, so wird die globale Konstante oder
    Funktion <code class="literal">name</code> verwendet, wenn sie existiert.
   </p>
   <p class="para">
    <div class="example" id="example-8">
     <p><strong>Beispiel #8 Unqualifizierte Funktions- oder Konstantennamen</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">blah\blah </span><span style="color: #007700">as </span><span style="color: #0000BB">foo</span><span style="color: #007700">;<br /><br />const </span><span style="color: #0000BB">FOO </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />function </span><span style="color: #0000BB">my</span><span style="color: #007700">() {}<br />function </span><span style="color: #0000BB">foo</span><span style="color: #007700">() {}<br />function </span><span style="color: #0000BB">sort</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">)<br />{<br />    </span><span style="color: #0000BB">\sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">array_flip</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">);<br />    return </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">my</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft "foo\my" auf<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hi'</span><span style="color: #007700">); </span><span style="color: #FF8000">// ruft die globale Funktion "strlen" auf, weil<br />                   // foo\strlen nicht existiert<br /></span><span style="color: #0000BB">$arr </span><span style="color: #007700">= array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">3</span><span style="color: #007700">,</span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$arr</span><span style="color: #007700">); </span><span style="color: #FF8000">// ruft die Funktion "foo\sort" auf<br /></span><span style="color: #0000BB">$c </span><span style="color: #007700">= </span><span style="color: #0000BB">foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// ruft die Funktion "foo\foo" auf - der Alias wird ignoriert<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// setzt $a auf den Wert der Konstante "foo\FOO" -<br />          // der Alias wird ignoriert<br /></span><span style="color: #0000BB">$b </span><span style="color: #007700">= </span><span style="color: #0000BB">INI_ALL</span><span style="color: #007700">; </span><span style="color: #FF8000">// setzt $b auf den Wert der globalen Konstante "INI_ALL"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.conflict">
   <h3 class="title">Importierte Namen dürfen keine Konflikte mit Klassennamen
    in der gleichen Datei erzeugen.
   </h3>
   <p class="para">
    Die folgende Kombination von Skripten ist gültig:
    <div class="informalexample">
     <p class="simpara">file1.php</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">mein\zeug</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="simpara">anderes.php</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">anderes</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">Ding </span><span style="color: #007700">{}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

     <p class="simpara">file2.php</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">mein\zeug</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'file1.php'</span><span style="color: #007700">;<br />include </span><span style="color: #DD0000">'anderes.php'</span><span style="color: #007700">;<br /><br />use </span><span style="color: #0000BB">anderes\Ding </span><span style="color: #007700">as </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">; </span><span style="color: #FF8000">// erzeugt ein Objekt der Klasse "Ding"<br />                  // aus dem Namespace "anderes"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="para">
    Es gibt hier, trotzdem es eine Klasse <code class="literal">MyClass</code> im Namespace
    <code class="literal">mein\zeug</code> gibt, keinen Namenskonflikt, weil die Definition
    der Klasse <code class="literal">MyClass</code> sich in einer anderen Datei befindet.
    Das nächste Beispiel erzeugt hingegen einen fatal error wegen eines
    Namenskonflikts, weil <code class="literal">MyClass</code> in derselben Datei
    definiert wird, die auch den use-Ausdruck beinhaltet.
    <div class="informalexample">
     <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">mein\zeug</span><span style="color: #007700">;<br />use </span><span style="color: #0000BB">anderes\Ding </span><span style="color: #007700">as </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br />class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{} </span><span style="color: #FF8000">// fatal error: Konflikt zwischen MyClass und import-Ausdruck<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.nested">
   <h3 class="title">Verschachtelte Namespaces sind nicht erlaubt.</h3>
   <p class="para">
    PHP erlaubt das Verschachteln von Namespaces nicht.
    <div class="informalexample">
     <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">mein\zeug </span><span style="color: #007700">{<br />    namespace </span><span style="color: #0000BB">verschachtelt </span><span style="color: #007700">{<br />        class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{}<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Es ist jedoch leicht möglich, verschachtelte Namespaces
    zu simulieren:
    <div class="informalexample">
     <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">mein\zeug\verschachtelt </span><span style="color: #007700">{<br />    class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{}<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.quote">
   <h3 class="title">Dynamische Namespacenamen sollten den Backslash escapen.</h3>
   <p class="para">
    Es ist wichtig zu bemerken, dass ein Backslash in Strings als Escape-Zeichen
    verwendet wird und daher immer verdoppelt werden sollte, wenn er in einem
    String verwendet wird. Andernfalls besteht das Risiko ungewollter
    Auswirkungen:
    <div class="example" id="example-9">
     <p><strong>Beispiel #9 Gefahren von Namespacenamen in Strings mit doppelten Anführungszeichen</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$a </span><span style="color: #007700">= </span><span style="color: #DD0000">"gefaehrlicher\name"</span><span style="color: #007700">; </span><span style="color: #FF8000">// \n ist in doppelten Anführungszeichen<br />                           // ein Zeilenumbruch!<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #DD0000">'ueberhaupt\nicht\gefaehrlich'</span><span style="color: #007700">; </span><span style="color: #FF8000">// hier gibt es keine Probleme<br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
    Innerhalb eines Strings, der von einfachen Anführungszeichen umschlossen ist,
    ist es deutlich ungefährlicher, die Backslash-Escape-Sequenz zu verwenden.
    Es wird dennoch empfohlen, Backslashes in allen Strings zu escapen.
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.constants">
   <h3 class="title">Zugriff auf undefinierte Konstanten mit Backslashes beendet das Skript
    mit einem fatal error.</h3>
   <p class="para">
    Jeder Zugriff auf eine Konstante mit unqualifiziertem Namen, wie
    <code class="literal">FOO</code>, wird eine Notice erzeugen, welche erklärt, dass
    PHP angenommen hat, dass <code class="literal">FOO</code> der Wert der
    Konstante sei. Jede Konstante, qualifiziert oder vollständig
    qualifiziert, deren Name einen Backslash enthält, wird einen
    fatal error hervorrufen, wenn sie nicht gefunden wurde.
    <div class="example" id="example-10">
     <p><strong>Beispiel #10 Undefinierte Konstanten</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">bar</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// notice - undefined constant "FOO" assumed "FOO";<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// fatal error, undefined namespace constant FOO<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// fatal error, undefined namespace constant bar\Bar\FOO<br /></span><span style="color: #0000BB">$a </span><span style="color: #007700">= </span><span style="color: #0000BB">\Bar\FOO</span><span style="color: #007700">; </span><span style="color: #FF8000">// fatal error, undefined namespace constant Bar\FOO<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
  </div>
  <div class="sect2" id="language.namespaces.faq.builtinconst">
   <h3 class="title">Die speziellen Konstanten <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> und <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> können nicht
   überschrieben werden.</h3>
   <p class="para">
    Jeder Versuch, eine Konstante in einem Namespace zu definieren, die eine
    der speziellen, eingebauten Konstanten ist, wird einen fatal error
    hervorrufen.
    <div class="example" id="example-11">
     <p><strong>Beispiel #11 Spezielle Konstanten</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">bar</span><span style="color: #007700">;<br />const </span><span style="color: #0000BB">NULL </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #FF8000">// fatal error;<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">true </span><span style="color: #007700">= </span><span style="color: #DD0000">'stupid'</span><span style="color: #007700">; </span><span style="color: #FF8000">// ebenfalls fatal error;<br />// etc.<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

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