<?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.rationale.php',
    1 => '&Uuml;bersicht',
    2 => '&Uuml;bersicht &uuml;ber Namespaces',
  ),
  'up' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'prev' => 
  array (
    0 => 'language.namespaces.php',
    1 => 'Namespaces',
  ),
  'next' => 
  array (
    0 => 'language.namespaces.definition.php',
    1 => 'Namespaces',
  ),
  '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.rationale" class="sect1">
  <h2 class="title">Übersicht über Namespaces</h2>
  
  <p class="verinfo">(PHP 5 &gt;= 5.3.0, PHP 7, PHP 8)</p>
  <p class="simpara">
   Was sind Namespaces? Im weitesten Sinne bieten Namespaces eine Möglichkeit,
   verschiedene Gegenstände zu kapseln. Dies kann man als abstraktes Konzept
   an vielen Dingen beobachten. In einem Betriebssystem dienen zum Beispiel
   Verzeichnisse dazu, um zusammengehörige Dateien zu gruppieren, und dienen
   als Namespace für die beinhalteten Dateien. In einem konkreten Beispiel
   kann die Datei <code class="literal">foo.txt</code> sowohl im Verzeichnis
   <code class="literal">/home/greg</code> als auch in <code class="literal">/home/other</code>
   existieren, aber es können keine zwei Varianten der Datei
   <code class="literal">foo.txt</code> im gleichen Verzeichnis existieren. Um auf die
   Datei <code class="literal">foo.txt</code> von außerhalb des Verzeichnisses
   <code class="literal">/home/greg</code> zuzugreifen, muss man zusätzlich dem
   Verzeichnisnamen den Dateinamen und ein Trennzeichen voranstellen, um
   <code class="literal">/home/greg/foo.txt</code> zu erhalten. Das gleiche Prinzip
   streckt sich auf Namespaces in der Programmierwelt aus.
  </p>

  <p class="simpara">
   In der Welt von PHP wurden Namespaces entworfen, um zwei Probleme zu lösen,
   auf die die Autoren von Bibliotheken und Anwendungen stoßen, wenn sie
   wiederverwendbare Codeelemente wie Klassen und Funktionen entwickeln:
  </p>
  <p class="para">
   <ol type="1">
    <li class="listitem">
     <span class="simpara">
      Namenskollisionen zwischen eigenem Code und internen
      PHP-Klassen/Funktionen/Konstanten oder Klassen/Funktionen/Konstanten von
      Drittanbietern.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Die Möglichkeit, einen Alias (oder einen Kurznamen) für Sehr_Lange_Namen
      einzuführen, die geschaffen wurde, um das erste Problem zu umgehen.
      Damit kann man die Lesbarkeit des Quellcodes erhöhen.
     </span>
    </li>
   </ol>
  </p>
  <p class="simpara">
   PHP-Namespaces bieten eine Möglichkeit, zusammengehörige Klassen,
   Interfaces, Funktionen und Konstanten zusammenzufassen. Dies ist ein
   Beispiel für die Namespace-Syntax in PHP:
  </p>
  <div class="example" id="example-1">
   <p><strong>Beispiel #1 Beispiel für Namespace-Syntax</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">my\name</span><span style="color: #007700">; </span><span style="color: #FF8000">// siehe Abschnitt "Namespaces definieren"<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass </span><span style="color: #007700">{}<br />function </span><span style="color: #0000BB">myfunction</span><span style="color: #007700">() {}<br />const </span><span style="color: #0000BB">MYCONST </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><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">$c </span><span style="color: #007700">= new </span><span style="color: #0000BB">\my\name\MyClass</span><span style="color: #007700">; </span><span style="color: #FF8000">// siehe Abschnitt "Globaler Namensraum"<br /><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">// siehe Abschnitt "Namespaces verwenden: Rückgriff auf<br />                   // globale Funktion/Konstante"<br /><br /></span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">namespace\MYCONST</span><span style="color: #007700">; </span><span style="color: #FF8000">// siehe Abschnitt "Namespace-Schlüsselwort und __NAMESPACE__-<br />                        // Konstante"<br /></span><span style="color: #0000BB">$d </span><span style="color: #007700">= </span><span style="color: #0000BB">__NAMESPACE__ </span><span style="color: #007700">. </span><span style="color: #DD0000">'\MYCONST'</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">constant</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">); </span><span style="color: #FF8000">// siehe Abschnitt "Namespaces und dynamische Sprachfeatures"<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
   <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
    <span class="simpara">
     Bei Namespace-Namen wird nicht zwischen Groß- und Kleinschreibung
     unterschieden.
    </span>
   </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Der Namespace <code class="literal">PHP</code>, sowie zusammengesetzte Namen, die
    mit dieser Bezeichnung beginnen (wie z. B. <code class="literal">PHP\Classes</code>),
    sind zur internen Verwendung in der Sprache reserviert und sollten im
    eigenen Programmcode nicht verwendet werden.
   </p>
  </p></blockquote>
 </div><?php manual_footer($setup); ?>