Autoload Klassen und Funktionen aus verschiedenen Dateien und Verzeichnissen

8

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

einzubeziehen

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

manuell aufrufen

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

    
anonymox 22.11.2015, 07:06
quelle

2 Antworten

6

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:

%Vor%

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%     
Mohammad_Hosseini 24.11.2015, 10:38
quelle
6
  1. 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.

  2. 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.

  1. PHP unterstützt nicht die Autoloading-Funktion. Fügen Sie alle Funktionen hinzu, die Sie benötigen, wenn Sie sich nicht darum kümmern müssen, ihre Einschlüsse zu codieren.
  

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.

  1. Wenn Sie mehrere Klassen / Funktionen in einer Datei haben, kenne ich keine dynamische Sprache, die magisch die richtige Datei auswählen kann. Ihr Autoloader sieht ziemlich Standard aus.
  

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.

    
Sheepy 24.11.2015 09:38
quelle