Ankündigung

Einklappen
Keine Ankündigung bisher.

[gelöst] Autoloading

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [gelöst] Autoloading

    Dieser Beitrag beschreibt wie vom Grundsatz Autoloader für PHP funktionieren.
    Dies wird anhand von Beispielcode gezeigt der für ein besseres Verständnis auf ein Minimum reduziert ist.

    Verzeichnisstruktur für das Beispiel:
    Code:
     |
     |- project
           |-- class
           |     |- autoload.php
           |     |- class1.php
           |     |- class2.php
           |
           |-- webroot
                 |- testsimpleautoload.php
    File autoload.php
    PHP-Code:
    <?php
    spl_autoload_register
    (function ($class) {
        
    $file __DIR__."/".$class.".php";
        if (
    file_exists($file)) {
           require 
    $file;
        }
        else {
           
    trigger_error("Error Autoload: file for class '$class' not found"E_USER_WARNING);
        }
    });
    File testsimpleautoload.php
    PHP-Code:
    <?php
    ini_set
    ('display_errors'1);  //dev
    error_reporting(-1);    // dev

    require __DIR__."/../class/autoload.php";
    var_dump(" autoload geladen");

    $class1 = new class1();

    //Zum Test: Erzeugt eine Warnung und einen Fatal error
    //$classX = new ClassX();
    Mit dem Laden uns Ausführen unserer autoload.php wird mittels spl_autoload_register() unsere anonyme Funktion registriert, die letzlich das Laden der Klasse realisiert. Es muss nur sichergestellt sein, das der Pfad zur autoload.php auch auf das richtige Verzeichnis zeigt und sich dort alle Klassen für unser kleines Beispiel befinden. Bei den Versuch ein Objekt einer Klasse zu erstellen welche noch nicht geladen ist wird unsere registrierte Funktion aufgerufen und der Klassenname (hier "Class1") übergeben. Unsere Funktion geht davon aus dass die Klasse im selben Verzeichnis wie die autoload.php liegt und die Erweiterung .php hat. Der Pfad wird zusammengebaut und wenn die Datei vorhanden ist wird diese geladen.

    Unsere Klasse Class1 soll nur zeigen wenn ein Objekt erstellt wird:

    File Class1.php
    PHP-Code:
    <?php
    class Class1 {
      public function 
    __construct(){
        
    var_dump(" Create Object class1");
      }
    }
    Wir erhalten beim Aufruf von testsimpleautoload.php dann diese Ausgabe:
    Code:
    string(17) " autoload geladen" string(21) " Create Object class1"
    LG jspit
Lädt...
X