Wir hören dieses Wort oft in der Entwicklung von PHP -Framework. Es wird normalerweise in Konfigurationsdateien, Kernklassen oder Dienstanbietern für "Initialisierung" angezeigt. Welche Rolle spielte es im Framework -Startprozess? Warum ist es wichtig? Lassen Sie uns diesen Artikel ausführlich analysieren.
Das Wort "init" stammt aus der Initialisierung , was die Initialisierung bedeutet. Der zentrale Zweck besteht darin, die erforderlichen Vorbereitungen vor dem offiziellen System vorzunehmen.
Im PHP -Framework ist die Init -Funktion normalerweise verantwortlich für:
Laden der Konfigurationsdatei
Registrieren Sie einen Dienst oder eine Komponente
Initialisieren Sie globale Variablen oder Konstanten
Konfigurationsfehlerhandhabung, Protokollierung
Stellen Sie die Datenbankverbindung und andere Ressourcen fest
Mit anderen Worten, es ist die Vorbereitungsverbindung, bevor das Framework gestartet wird .
Verwenden wir ein einfaches Beispiel. In einem typischen PHP -Framework kann es einen solchen Eintragsdatei index.php geben:
<?php
require_once 'vendor/autoload.php';
$app = new App();
$app->init();
$app->run();
In diesem Beispiel ist $ App-> init () der Schlüsselschritt bei der Initialisierung. Es macht normalerweise Folgendes::
public function init()
{
$this->loadConfig();
$this->registerServices();
$this->setupErrorHandling();
}
LoadConfig () : Datenbank, Cache, E -Mail und andere Konfigurationen aus der Konfiguration/ Verzeichnis laden.
RegisterServices () : Registrieren Sie Kerndienste (wie Routing, Sitzung, Cache) in den Container.
setUperRorHandling () : Stellen Sie den Ausnahmebehandler oder Fehlerprotokoll fest.
Ohne diesen Schritt kann die Funktion run () aufgrund mangelnder Konfiguration und Servicefehler direkt abstürzen.
Angenommen, wir haben einen einfachen Rahmen, um die spezifische Init -Implementierung anzuzeigen:
<?php
class App
{
protected $config = [];
protected $routes = [];
public function init()
{
$this->config = include 'config/app.php';
$this->registerRoutes();
}
protected function registerRoutes()
{
$this->routes = [
'/' => 'HomeController@index',
'/about' => 'AboutController@show',
];
}
public function run()
{
$uri = $_SERVER['REQUEST_URI'];
if (isset($this->routes[$uri])) {
list($controller, $method) = explode('@', $this->routes[$uri]);
(new $controller)->$method();
} else {
echo "404 Not Found";
}
}
}
Nehmen Sie die Konfigurationsdateikonfiguration /app.php an:
<?php
return [
'base_url' => 'https://gitbox.net',
'db' => [
'host' => 'localhost',
'user' => 'root',
'pass' => '',
],
];
Hier stellt init () sicher, dass die grundlegende Konfiguration des Systems vor der Routenanpassung und der Ausführung von Controller geladen wurde.
Warum tun dies nicht direkt im Konstruktor? Gründe sind:
? Trennung der Verantwortlichkeiten : Der Konstruktor ist nur für die grundlegende Erstellung von Objekten verantwortlich, während sich Init auf die Initialisierungslogik konzentriert.
? Steuerbares Start : In einigen Fällen müssen Sie das Framework möglicherweise nur instanziieren, aber nicht ausführen, und Sie können sich dafür entscheiden, Init nicht anzurufen.
? Einfache Erweiterung : Unterklassen können die Init -Methode überschreiben und die Initialisierungsschritte anpassen, ohne den Konstruktionsprozess zu stören.
Obwohl reife Frameworks wie Laravel und Symfony Funktionen nicht direkt als Init () auf der Oberfläche bezeichnet werden können, haben sie alle während ihres Startups ähnliche Stufen:
Laravel's Bootstrap/App.php wird zur Erstellung von Anwendungsinstanzen verwendet.
Symfony's Kernel :: InitializeContainer () , zum Initialisieren des Servicebehälters.
Dies sind alles Manifestationen der Init -Idee : Bevor die Anwendung ausgeführt wird, erstellen Sie die erforderliche Umgebung.