2012-03-29 2 views
0

Ist es gut, einen Autoloader zu verwenden, der root/app/model/test.php lädt, wenn Sie versuchen, App\Model\Test zu verwenden? Auf diese Weise sollte jede Klasse entsprechend ihrem Namensraum organisiert werden.Autoloader konvertiert Namespace in Ordnerpfad

Ist das ein guter Ansatz? Wenn nicht, warum? Was würdest du vorschlagen?

Sollte ich ein spezifisches Array namespace => path definieren, das sicherstellen wird, dass wir keine unerwartete Datei laden? Auf diese Weise würde ich jedes Mal so etwas wie $map['App\Model\Test'] = 'root/app/model/test'; setzen und das würde im Grunde alle Spaß am Autoloader löschen. Ist es nicht?

Antwort

1
  1. Es ist ein eher „Standard“ Ansatz in OOP
  2. Normalerweise Autoloader sind schneller, wenn sie ein classmap ($map) in sie injiziert haben. Dies liegt daran, dass sie nicht die Include-Pfade durchlaufen müssen, um die Datei mit der Klasse zu instanziieren, die instanziiert wird. Geben Sie ihnen einen absoluten Dateinamen, und Sie werden sie vom Include-Pfad entkoppeln. Wenn Sie $map angeben, können Sie Ihre Klassen auch auf andere Weise organisieren (nicht nur auf Dateisystem-basierter Benennung). Abgesehen davon gibt es auch Klassenkarten-Generatoren, die Sie vorher ausführen können, um dies tatsächlich zu erreichen und nicht jedes Mal, wenn Sie eine Klasse umbenennen oder verschieben, manuell zu tun. Während der Entwicklung ist es jedoch bequemer, die standardmäßige Autoloading-Logik (keine Klassenkarten) zu verwenden, da das Synchronisieren von Dateien und die darin deklarierten Klassen ziemlich mühsam werden und wenig mit der Entwicklung selbst tun können.

die Anzahl der Standardcode zu reduzieren, ist nicht der einzige Zweck des Autoloaders:

  • Sie nur die Klassendeklarationen laden, die im Code tatsächlich benötigt werden; nicht alle oder einige Deklarationen; nur diejenigen, die verwendet werden
  • es sorgt für Ihre include_once und require_once in Bezug auf Klassen nur in autoloading passieren
  • Ihre Klassen konzentrieren sich nicht auf das Laden von Dateien; Sie konzentrieren sich auf ihre Funktion