<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.oop5.autoload.php',
    1 => 'Automatisches Laden von Klassen',
    2 => 'Automatisches Laden von Klassen',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Klassen und Objekte',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.constants.php',
    1 => 'Klassenkonstanten',
  ),
  'next' => 
  array (
    0 => 'language.oop5.decon.php',
    1 => 'Konstruktoren und Destruktoren',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/oop5/autoload.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.autoload" class="sect1">
  <h2 class="title">Automatisches Laden von Klassen</h2>
  <p class="para">
   Viele Entwickler, die objektorientierte Anwendungen entwickeln, erzeugen
   für jede Klassendefinition eine eigene PHP-Quelldatei. Eines der größten
   Ärgernisse ist die Notwendigkeit, am Anfang eines jeden Skripts eine lange
   Liste von benötigten Include-Anweisungen (eine für jede Klasse) schreiben
   zu müssen.
  </p>
  <p class="para">
   Die Funktion <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> registriert eine
   beliebige Anzahl von Autoladern, die es ermöglichen, dass Klassen und
   Schnittstellen automatisch geladen werden, wenn sie derzeit nicht definiert
   sind. Durch das Registrieren von Autoladern erhält PHP einen letzten Versuch,
   die Klasse oder Schnittstelle zu laden, bevor es unter Ausgabe einer
   Fehlermeldung scheitert.
  </p>
  <p class="para">
   Jedes klassenähnliche Konstrukt kann auf die gleiche Weise automatisch
   geladen werden. Dazu gehören Klassen, Schnittstellen, Traits und
   Aufzählungen.
  </p>
  <div class="caution"><strong class="caution">Achtung</strong>
   <p class="para">
    Vor PHP 8.0.0 war es möglich, <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> zu
    verwenden, um Klassen und Schnittstellen automatisch zu laden. Dies ist
    jedoch eine weniger flexible Alternative zu
    <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span>.
    <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> ist seit PHP 7.2.0 veraltet und wurde in
    PHP 8.0.0 entfernt.
   </p>
  </div>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Die Funktion <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> kann mehrfach
    aufgerufen werden, um mehrere Autoloader zu registrieren. Wenn von einer
    Autoload-Funktion eine Exception ausgelöst wird, wird dieser Vorgang
    jedoch unterbrochen und es werden keine weiteren Autoload-Funktionen
    ausgeführt. Aus diesem Grund wird dringend davon abgeraten, von einer
    Autoload-Funktion aus eine Exception auszulösen.
   </p>
  </p></blockquote>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Autoload-Beispiel</strong></p>
    <div class="example-contents"><p>
     Dieses Beispiel versucht die Klassen <code class="literal">MyClass1</code> und
     <code class="literal">MyClass2</code> aus den entsprechenden Dateien
     <var class="filename">MyClass1.php</var> und <var class="filename">MyClass2.php</var>
     zu laden.
    </p></div>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />spl_autoload_register</span><span style="color: #007700">(function (</span><span style="color: #0000BB">$class_name</span><span style="color: #007700">) {<br />    include </span><span style="color: #0000BB">$class_name </span><span style="color: #007700">. </span><span style="color: #DD0000">'.php'</span><span style="color: #007700">;<br />});<br /><br /></span><span style="color: #0000BB">$obj  </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass1</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$obj2 </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass2</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="example-2">
    <p><strong>Beispiel #2 Weiteres Autoload-Beispiel</strong></p>
    <div class="example-contents"><p>
     Dieses Beispiel versucht, das Interface <code class="literal">ITest</code>
     zu laden.
    </p></div>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />spl_autoload_register</span><span style="color: #007700">(function (</span><span style="color: #0000BB">$name</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />});<br /><br />class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">implements </span><span style="color: #0000BB">ITest </span><span style="color: #007700">{<br />}<br /><br /></span><span style="color: #FF8000">/*<br />string(5) "ITest"<br /><br />Fatal error: Interface 'ITest' not found in ...<br />*/<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="example-3">
    <p><strong>Beispiel #3 Verwenden des Composer-Autoloaders</strong></p>
    <div class="example-contents"><p>
     Der <a href="https://getcomposer.org/" class="link external">&raquo;&nbsp;Composer</a> erzeugt eine <code class="literal">vendor/autoload.php</code>,
     die so konfiguriert ist, dass sie die vom Composer verwalteten Pakete
     automatisch lädt. Durch das Einbinden dieser Datei können diese Pakete
     ohne zusätzlichen Aufwand verwendet werden.
    </p></div>
    <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">require </span><span style="color: #0000BB">__DIR__ </span><span style="color: #007700">. </span><span style="color: #DD0000">'/vendor/autoload.php'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$uuid </span><span style="color: #007700">= </span><span style="color: #0000BB">Ramsey\Uuid\Uuid</span><span style="color: #007700">::</span><span style="color: #0000BB">uuid7</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Neue UUID erzeugt -&gt; "</span><span style="color: #007700">, </span><span style="color: #0000BB">$uuid</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">toString</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <div class="simplesect">
   <h3 class="title">Siehe auch</h3>
   <p class="para">
    <ul class="simplelist">
     <li><span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span></li>
     <li><a href="var.configuration.php#ini.unserialize-callback-func" class="link">unserialize_callback_func</a></li>
     <li><a href="var.configuration.php#ini.unserialize-max-depth" class="link">unserialize_max_depth</a></li>
     <li><span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span></li>
     <li><span class="function"><a href="function.spl-autoload.php" class="function">spl_autoload()</a></span></li>
     <li><span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span></li>
    </ul>
   </p>
  </div>

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