Ich habe diesen Autoload-Code:
%Vor%Ich habe drei Verzeichnisse, in denen alle meine Klassen und Funktionen gespeichert sind.
Kann ich eine einzelne Autoload-Datei im Controls
-Verzeichnis erstellen und damit alle Funktionen oder Klassen in anderen PHP-Dateien laden, zB index.php
file in /portal/main/index.php
ist es möglich, die Klassen controls
und config
in der Datei index.php zu laden, ohne eine Datei oben in index.php
file
Ich meine autoload erkennt automatisch, welche Datei eine Klasse oder Funktion anfordert und fügt diese Datei ein.
aktualisierter Code:
%Vor%Ich habe den Code und die Include-Dateien aktualisiert, aber das einzige Problem, das ich habe, ist, dass diese Funktion nicht automatisch ausgeführt wird,
zum Beispiel meine Autoload-Datei ist in: root/Controls/autoload.php
und ich brauche einige Klassen und Funktionen in: root/portal/index.php
Wenn ich Klassen in index.php definiere, erhalte ich den Fehler, dass die Datei nicht existiert
und ich sollte autoload.php
file in index.php
Wie kann ich autoload smart machen, das ich nicht in jeder Datei enthalten sollte, um Klassen einzuschließen?
Bitte hilf mir. Vielen Dank im Voraus
Einfache manuelle Lösung: Setze deine autoload
Datei in deinen Projektstamm und füge sie in deine Indexdatei ein, dies erledigt den Job.
Wenn Sie jedoch htaccess
oder php.ini
verwenden möchten:
Legen Sie eine Datei mit dem Namen .user.ini
in den Dokumentenstamm und fügen Sie die Datei auto_prepend_file Direktive da drin:
Die Datei muss innerhalb von include_path von PHP liegen. Sie müssen also entweder das Verzeichnis der Datei im include_path in der php.ini oder das in der .htaccess mit einer php_value-Anweisung angeben.
%Vor% Wenn Sie die obige Methode in .htaccess verwenden, müssen Sie den include_path von php.ini kopieren und den folgenden Befehl hinzufügen: /path_to/file_directory
, damit Sie keine bereits benötigten Includes verlieren.
Alternativ fügen Sie einfach Folgendes hinzu: /path/to/file_directory to include_path directly in the php.ini
Aktualisieren
Wenn Sie den include_path nicht ändern können, versuchen Sie möglicherweise, einen relativen Pfad zur Datei auto_prepend_file anzugeben. Dies sollte funktionieren, da der gesendete Dateipfad identisch verarbeitet wird, als ob er mit require () aufgerufen wurde:
%Vor%Ihr Programm ist nur so schlau wie Sie. Wenn Sie davon träumen, ein Problem zu lösen, das über die Fähigkeiten einer Mainstream-Sprache hinausgeht, liegt das Problem in Ihrem Traum, nicht in der Sprache.
Um den PHP-Code automatisch zu laden, legen Sie auto_prepend_file
in php.ini zu Ihrem Autoloader-Skript.
Alternativ können Sie es zum zentralisierten Einstiegspunkt machen und den Verkehr mit mod_rewirte steuern.
Das ist eine schlechte Übung. Beide Methoden hängen von der Serverkonfiguration wie .htaccess ab und sind nicht immer verfügbar. Sie können auch vorhandene Konfigurationen überschreiben oder einige Pfade nicht neu schreiben.
Sie sollten die PHP-Anfragen manuell zentralisieren (und nicht-Eintrittspunkte abriegeln), oder require_once in jedem Eintrittspunkt.
Schau dir Wikipedia, Magento oder WordPress an. Sie haben Hunderte, wenn nicht Tausende globale Funktionen.
Machen Sie sich keine Sorgen um einschließlich - vertrauen Sie Ihrem Festplatten-Cache und aktivieren Sie den Opcode-Cache . Statische Inklusion ist ziemlich schnell und mit Opcode-Cache kann es schneller sein als bedingte Lasten.
Sie können alles in PHP dynamisch definieren. PHP kann nie sicher sein, was es bekommen wird, wenn es den Code nicht wirklich ausführt. Auto-Loader vertrauen einfach auf Dateinamen als korrekte und vollständige Erklärung dessen, was in der Datei enthalten ist.
Da Ihr Autoloader alle Ordner durchsucht, möchten Sie möglicherweise beim ersten Ausführen eine statische Dateizuordnung erstellen und die Zuordnung für untergeordnete Ladevorgänge verwenden. Angenommen, Sie erstellen keine Klassendateien dynamisch mit PHP, natürlich.