Heim > Artikel > Backend-Entwicklung > Implementierungscode für einfaches PHP-Routing und automatische Klassenladefunktion
Dieser Artikel stellt hauptsächlich die von PHP implementierten einfachen Routing- und Klassenladefunktionen vor. Er analysiert die Prinzipien und zugehörigen Implementierungstechniken des PHP-Routings und des automatischen Klassenladens in Form von Beispielen Ich hoffe, es kann allen helfen.
Das Projektverzeichnis lautet wie folgt
Eintragsdatei index.php
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); core__app::run(); //
Klasse automatisches Laden der Datei ambient.php
<?php //根据类名来include文件 class loader { //找到对应文件就include static function load($name) { $file = self::filepath($name); if ($file) { return include $file; } } static function filepath($name, $ext = '.php') { if (!$ext) { $ext = '.php'; } $file = str_replace('__', '/', $name) . $ext; //类名转路径 $path .= WEBROOT . '/' . $file; if (file_exists($path)) { return $path; //找到就返回 } return null; } } spl_autoload_register('loader::load');
Die Laderegeln meiner Klasse hier sind zum Beispiel core__app::run()
entsprechend der run()
-Methode des Stammverzeichnisses/core/app.php und Die Funktion spl_autoload_register()
wird verwendet, um das automatische Laden zu implementieren. Wenn ein bestimmter Klassenname aufgerufen wird, wird spl_autoload_register('loader::load')
automatisch ausgeführt, um die entsprechende Klassendatei entsprechend dem Klassennamen einzuschließen.
Die Ausführungsmethode der app.php-Eintragsdatei startet die Ausführung des Framework-Prozesses
<?php class core__app { static function run() { $a = $_SERVER['REQUEST_URI']; $uri = rtrim(preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']), '/'); $params = explode('/', trim($uri, '/')); $count = count($params); if ($count > 1) { $controller = $params[0]; $method = $params[1]; } elseif ($count == 1) { $controller = 'index'; $method = $params[0]; } else { } $filename = WEBROOT . '/controller/' . $controller . '.php'; $controller = 'controller__'.$controller; try { if (!file_exists($filename)) { throw new Exception('controller ' . $controller . ' is not exists!'); return; } include($filename); if (!class_exists($controller)) { throw new Exception('class ' . $controller . ' is not exists'); return; } $obj = new ReflectionClass($controller); if (!$obj->hasMethod($method)) { throw new Exception('method ' . $method . ' is not exists'); return; } } catch (Exception $e) { echo $e; //展示错误结果 return; } $newObj = new $controller(); call_user_func_array(array($newObj, $method), $params); } }
Suchen Sie den entsprechenden Controller gemäß der Anforderungs-URI und verwenden Sie call_user_func_array()
Methode zum Aufrufen der Methode im Controller
Stammverzeichnis/controller/test.php
<?php class controller__test { public function write($controller, $method) { //config__test::load('test'); model__test::write($controller, $method); } }
Tatsächlich ist der Aufruf hier nicht unbedingt erforderlich Um die Testmethode im Modell aufzurufen, können Sie jede Datei im Modellverzeichnis anpassen. Zuvor können Sie einige Konfigurationsdateien lesen und andere Vorgänge ausführen.
Stammverzeichnis/model/test.php
<?php class model__test { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }
Zum Beispiel kommt die Hostname-/Test-/Schreibanforderung aus der Eintragsdatei und gehen Sie durch core__app::run
Sie finden die entsprechende Controller__Test-Klasse unter dem Controller und führen die write()
Methode aus
Verwandte Empfehlungen:
So implementieren Sie einfaches Routing in PHP
JS-Methode zur Implementierung einer einfachen Router-Funktion
JS-Methode zur Implementierung einer einfachen Router-Funktion_Javascript-Fähigkeiten
Das obige ist der detaillierte Inhalt vonImplementierungscode für einfaches PHP-Routing und automatische Klassenladefunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!