Frage

Welche Lösung würden Sie für die Aufnahme von Dateien in einem PHP-Projekt empfehlen?

  1. Es gibt keine manuellen Anrufe erfordern / include Funktionen - alle Last durch automatische Laden Funktionen
  2. Package Import, wenn nötig.

Hier ist das Paket Import API:

import('util.html.HTMLParser');
import('template.arras.*'); 

In dieser Funktion Deklaration können Sie die Zeichenfolge mit Punkten (Pakethierarchie delimeter) explodieren, durch die Dateien in bestimmten Paket (Ordner) Looping enthalten nur einer von ihnen oder alle von ihnen, wenn das Sternsymbol am Ende der gefunden wird string, zB ( 'Template.arras. *').

Einer der Vorteile, die ich in Paket importiert Methode sehen kann, ist, dass es Sie zwingen kann besser Objekt Zersetzung und Klassen Gruppierung zu verwenden.

Einer der Nachteile I in automatischem Laden Verfahren sehen -. Ist, dass Autoload-Funktion sehr groß werden kann und nicht sehr offensichtlich / lesbar

Was denken Sie darüber?

  • Welche Vorteile / Nachteile können Sie in jeder dieser Methoden nennen?
  • Wie kann ich die beste Lösung für das Projekt finden?
  • Wie kann ich wissen, ob es irgendwelche Performance-Probleme, wenn das Paketmanagement verwendet wird?
War es hilfreich?

Lösung

Ich benutze __autoload () ausgiebig. Die autload Funktion, die wir in unserer Anwendung hat ein paar Verbesserungen für die Abwärtskompatibilität von älteren Klassen, aber wir folgen in der Regel einer Konvention, wenn neue Klassen erstellen, die automatisch geladen () erlauben ziemlich seemlessly zu arbeiten:

  • Konsistente Klasse Naming : jede Klasse in einer eigenen Datei wird jede Klasse mit Kamel-Fall durch einen Unterstrich getrennt benannt. Diese Karten zum Klassenpfad. Beispielsweise ordnet Some_CoolClass in unser Klassenverzeichnis dann ‚Einige / CoolClass.class.php‘. Ich denke, einige Frameworks verwenden diese Konvention.
  • Erfordern
  • Explizit Externe Klassen . Da wir keine Kontrolle über die Benennung von externen Bibliotheken, die wir verwenden, laden wir sie PHP require_once () Funktion mit

Andere Tipps

Die Import-Methode ist eine Verbesserung, aber immer noch Lasten bis mehr als nötig.
Entweder durch das Sternchen verwenden oder sie bis in den Anfang des Skripts zu laden (weil Import vor jeder „neuen Klassenname“ wird lästig werden)

Ich bin ein Fan von __autoload() oder noch besser spl_autoload_register()
Denn es wird nur die Klassen enthalten, die Sie verwenden und den zusätzlichen Vorteil von nicht darum kümmern, wo die Klasse befindet. Wenn Ihr Hochschulen bewegt eine Datei in ein anderes Verzeichnis, das Sie nicht ausgeführt werden.

Der Nachteil ist, dass es eine zusätzliche Logik braucht um es richtig mit Verzeichnissen arbeiten.

Ich benutze require_once ( "../ path-to-auto-load-script.php.inc") mit automatischer Last

Ich habe eine Standard-Namenskonvention für alle Klassen und inc-Dateien, die bestimmen, es einfacher programaticaly machen, welche Klassennamen zur Zeit angefordert wird.

beispielsweise alle Klassen haben eine gewisse Ausdehnung wie inc.php
(so weiß ich, dass sie in dem / cls Verzeichnis sein werden)
und
alle inc Dateien mit .ht starten (so werden sie in dem / inc Verzeichnis)

Auto Last akzeptiert einen Parameter: classname, die ich verwende, um dann festzustellen, wo die Datei tatsächlich befindet. einmal Looping Ich weiß, was mein Zielverzeichnis ist, jedes Mal „../“ zu berücksichtigen Unterunterseiten hinzufügen, (das schien Auto Last für mich zu brechen) und schließlich require_once'ing die eigentliche Code-Datei einmal gefunden.

empfehle ich die folgenden Aktionen statt:

Werfen Sie alle Ihre Klassen in ein statisches Array, classname => filepath / Klassendatei. Die automatische Ladefunktion kann die Klassen Last verwenden.

Damit wird sichergestellt, dass Sie immer die minimale Menge an Dateien laden. Dies bedeutet auch, dass Sie vermeiden, völlig albern Klassennamen und Parsen der Namen.

Wenn es langsam ist, können Sie auf einige Beschleuniger werfen, und das wird gewinnen Sie eine ganze Menge mehr, wenn es immer noch langsam ist, können Sie die Dinge durch eine ‚kompilieren‘ Prozess ausgeführt, in denen häufig verwendete Dateien nur abgeladen werden in gemeinsamen Dateien und die automatisch geladen Referenzen können aktualisiert werden, an die richtige Stelle zu zeigen.

Wenn Sie in Probleme laufen beginnt, wo Ihr das automatische Laden zu langsam ist, die ich schwer zu glauben, können Sie, dass aufgeteilt nach Paketen und haben mehrere automatische Laden von Funktionen, auf diese Weise nur Teilmengen des Arrays erforderlich sind, diese Arbeiten am besten, wenn Ihre Pakete werden um Module der Software definiert (Login, admin, E-Mail, ...)

Ich bin kein Fan von __autoload(). In vielen Bibliotheken (einige PEAR-Bibliotheken, zum Beispiel), developersuse class_exists() ohne in dem relativ neuen zweiten Parameter. Alle Legacy-Code, den Sie haben könnte auch dieses Problem haben. Dies kann dazu führen, Warnungen und Fehler, wenn Sie einen __autoload() definiert haben.

Wenn Ihre Bibliotheken obwohl klar sind, und Sie nicht Legacy-Code zu tun haben, dann ist es ein fantastisches Werkzeug. Manchmal wünschte ich, PHP ein wenig schlauer gewesen war, wie sie das Verhalten von class_exists() geschaffen, weil ich das Problem denke, mit dieser Funktionalität ist nicht __autoload().

Ihr eigenes Verpackungssystem Roll ist wahrscheinlich eine schlechte Idee. Ich würde vorschlagen, dass Sie gehen mit explizitem Handbuch enthält, oder mit automatischem Dokumenteneinzug (oder eine Kombination für diese Angelegenheit).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top