Klassen-Autoloader einbinden - sicherheitstechnische Bedenken?

preko

Erfahrenes Mitglied
Hallo,

ich habe folgende Funktion, die in einer externen PHP-Datei (function.inc.php) ausgelagert ist und per Funktionsaufruf ( autoloadClasses(); ) wie nachfolgend abgebildet am Anfang der jeweiligen Seiten eingebunden wird:
PHP:
<?php
   
    // Including Functions
    include_once "function.inc.php";
   
    // Class autoloader call
    autoloadClasses();
?>

Die eigentliche Autoloader-Funktion sieht wie folgt aus:

PHP:
<?php

function autoloadClasses() {
  $classFolder = "classes";                       // Ordner, in dem die einzubindenden Klassen abgelegt sind
  echo "classFolder: ".$classFolder."<br />";
  $file = scandir($classFolder);
  $a = 0;

  while (!empty($file[$a])) {
    switch($file[$a]) {
      case ".":                                   // Falls keine Datei, sondern ein Punkt ausgewiesen wird
        $a++;
        break;

      case "..":                                  // Falls keine Datei, sondern ein Doppelpunkt ausgewiesen wird
        $a++;
        break;

      default:                                    // Falls ein Dateiname mit dem Klassennamen ausgewiesen wird -> einbinden!
        echo "Klasse: ".$classFolder."/".$file[$a]."<br />";
        include_once $classFolder."/".$file[$a++];
        break;
    }
  }
}
Im Prinzip durchläuft die Funktion den Klassenordner und includiert die jeweiligen Klassendateien. So wird jede Klassendatei automatisch eingebunden sobald sie erstellt wird. Damit braucht man sich nicht mehr um die einzelne Einbindung zu kümmern.

Spricht irgendetwas gegen diese Vorgehensweise (Sicherheitstechnisch oder anderes)?

Beste Grüße!
 
Zuletzt bearbeitet:
Vorteile aus meiner Sicht aufgelistet:
  1. du nicht prüfen musst, ob ein Punkt oder so mit kommt.
  2. du musst nicht alle Klassen separat einbinden, sondern lediglich deine "autoloader.php".
  3. du hast deutlich weniger Code
  4. du definierst einen festen Klassen Ordner
Nachteil: Du kannst keine Klassen ansprechen deren Filename: klasse.class.php lautet.
Da Du mit new Klasse.class() nicht arbeiten kannst.

---------------------------------------------------

Könnte natürlich mit Namespaces sicherlich doch noch gehen... :)

Dadurch kannst Du mittels:
PHP:
<?php
$class = new Klasse();
?>
Die Klasse direkt verwenden, ohne die Klasse selbst einbinden zu müssen, da dies über die "Hauseigene"-Autoload Funktion passiert.

Natürlich nur wenn die Datei vorhanden und die Klasse auch richtig definiert/geschrieben wurde. :)
 
Zurück