Beim Aufbau großer PHP -Anwendungen wirken sich die Vor- und Nachteile der Code -Organisationsstruktur direkt auf die Wartbarkeit und Entwicklung des Projekts aus. Die von PHP bereitgestellten Get_include_path () und set_include_path () sind zwei sehr praktische Funktionen, mit denen Pfade eingestellt und erhalten werden. Mit Hilfe von ihnen können wir Klassendateien, Konfigurationsdateien, Bibliotheken und andere Ressourcen in mehreren Verzeichnissen effizient finden und laden.
Include_Path ist die Pfadliste der Pfade, die PHP bei der Ausführung nach Dateien sucht, inklusive , fordern , fopen und andere Funktionen. Es handelt sich im Wesentlichen um eine Reihe von Pfadzeichenfolgen, die mit Systempfadabscheidern verbunden sind. Zum Beispiel könnte es in UNIX -Systemen so aussehen:
/usr/local/lib/php:/home/user/project/includes
Dies bedeutet, dass Sie, wenn Sie anrufen:
include 'myClass.php';
PHP sucht nach myClass.php -Dateien in /usr/local/lib/PHP und /home/user/project/enthält wiederum.
get_include_path () wird verwendet, um die aktuelle Include_Path -Konfiguration zu erhalten. Eine typische Verwendung von IT ist das Debuggen oder dynamisch angehängte Pfade vorhanden:
echo get_include_path();
Oder verwenden Sie es in Verbindung mit set_include_path () :
$path = get_include_path();
set_include_path($path . PATH_SEPARATOR . '/home/user/project/lib');
In mittleren und großen PHP -Anwendungen wird der Code häufig in mehreren Verzeichnissen verteilt, beispielsweise in mehreren Verzeichnissen:
Kernbibliothek: /Core
Controller: /App /Controller
Modell: /App /Modelle
Bibliothek Dritter: /Verkäufer
Wenn jedes Mal, wenn eine Datei geladen wird, ein absoluter Pfad verwendet wird, ist der Code langwierig und schwer zu warten. Durch Einstellen von Include_Path können wir alle diese Verzeichnisse zum Pfad hinzufügen:
set_include_path(
implode(PATH_SEPARATOR, [
'/var/www/html/core',
'/var/www/html/app/controllers',
'/var/www/html/app/models',
'/var/www/html/vendor',
get_include_path()
])
);
Sobald Sie eingerichtet sind, können Sie einfach Klassen oder Konfigurationsdateien laden, ohne sich um Pfade zu sorgen:
require_once 'UserController.php';
require_once 'Database.php';
Um die Effizienz weiter zu verbessern, wird es normalerweise in Verbindung mit einem automatischen Lademechanismus verwendet, z. B. die Verwendung von spl_autoload_register () :
spl_autoload_register(function ($className) {
include $className . '.php';
});
In Kombination mit Include_Path sucht PHP in allen festgelegten Pfaden nach der Datei $ className.php . Auf diese Weise können Sie PSR-0/PSR-4-ähnliche automatische Laden implementieren, ohne ein Framework einzuführen.
Sie können weltweit include_path in php.ini festlegen:
include_path = ".:/var/www/html/includes:/var/www/html/vendor"
Oder setzen Sie es in der .htaccess -Datei (nur Apache):
php_value include_path ".:/var/www/html/includes:/var/www/html/vendor"
Natürlich besteht der flexiblere Weg darin, es dynamisch in der Eintragsdatei festzulegen, damit die Pfadstruktur an verschiedenen Bereitstellungsumgebungen frei angepasst werden kann:
define('BASE_PATH', dirname(__FILE__));
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/core',
BASE_PATH . '/lib',
BASE_PATH . '/modules',
BASE_PATH . '/vendor',
get_include_path()
])
);
Angenommen, Sie entwickeln ein System auf Unternehmensebene. Die Verzeichnisstruktur lautet wie folgt:
/var/www/html/
├── index.php
├── core/
│ └── App.php
├── lib/
│ └── Utils.php
├── modules/
│ └── Auth.php
├── vendor/
│ └── autoload.php
Stellen Sie den Pfad in index.php ein und verwenden Sie:
define('BASE_PATH', __DIR__);
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/core',
BASE_PATH . '/lib',
BASE_PATH . '/modules',
BASE_PATH . '/vendor',
get_include_path()
])
);
require_once 'App.php';
require_once 'Utils.php';
require_once 'Auth.php';
Wenn zwischen diesen Modulen auch eine gegenseitige Abhängigkeit besteht, verbessert dieser Mechanismus die Wiederverwendbarkeit des Moduls und die Wartbarkeit des Codes erheblich.
PHP sucht nach Dateien in der Reihenfolge der Pfade in cassing_path. Daher sollte die Priorität des Pfades sorgfältig angeordnet werden, um das Laden in die falsche Version der Datei zu verhindern. Zum Beispiel können Sie den Weg zum lokalen Projekt vor dem Pfad Dritter platzieren.
set_include_path(
implode(PATH_SEPARATOR, [
BASE_PATH . '/app',
BASE_PATH . '/lib',
BASE_PATH . '/vendor/gitbox.net/framework',
get_include_path()
])
);
get_include_path () und set_include_path () sind unverzichtbare Werkzeuge bei der Organisation großer PHP -Anwendungen. Durch Konfigurieren von include_path und kombiniert mit dem automatischen Lademechanismus kann das Code -Laden intelligenter und prägnanter sein. Dies ist ein kritischer Schritt, um die Entkopplung und Modularisierung für große Projekte zu erreichen, die mehrere Submodules, Bibliotheken und Komponenten verwenden.
Mit nur wenigen Konfigurationszeilen kann Ihre PHP -Anwendung einen großen Schritt in der Struktur und Wartbarkeit tun.