Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert Routing und automatisches Laden von Klassen
Dieses Mal zeige ich Ihnen das PHP-Routing und das automatische Laden von Klassen. Was sind die Vorsichtsmaßnahmen für die Implementierung des Routings und des automatischen Ladens von Klassen? einmal einen Blick.
Das Projektverzeichnis lautet wie folgt
Eintragsdateiindex.php
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); coreapp::run(); //
Klasse automatisches Laden der Datei Environment.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 für meine Klassen entsprechen beispielsweise der coreapp::run()
-Methode im Stammverzeichnis/core/app.php. Die Funktion run()
wird verwendet, um das automatische Laden zu implementieren Wenn ein bestimmter Klassenname aufgerufen wird, wird er automatisch ausgeführt. spl_autoload_register()
Fügen Sie die entsprechende Klassendatei entsprechend dem Klassennamen ein. spl_autoload_register('loader::load')
<?php class coreapp { 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 rufen Sie ihn mit der Methode
auf Methode im Controllercall_user_func_array()
<?php class controllertest { public function write($controller, $method) { //configtest::load('test'); modeltest::write($controller, $method); } }Tatsächlich muss der Aufruf hier nicht unbedingt die Testmethode im Modell aufrufen. Sie können eine beliebige aufrufen Datei im Modellverzeichnis. Sie können einige Konfigurationsdateien und andere Vorgänge lesen. Stammverzeichnis/model/test.php
<?php class modeltest { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }Zum Beispiel kommt die Anfrage hostname/test/write aus der Eintragsdatei. Nach
finden Sie die Führen Sie die entsprechende coreapp::run
-Methode write()
Detaillierte Erklärung des von PHP beibehaltenen Schlüsselwerts + zusammengeführten Arrays
Installation der Apache- und PHP-Umgebung in Alibaba Cloud
Wie thinkphp URLs gemäß Routing-Regeln generiert
Das obige ist der detaillierte Inhalt vonPHP implementiert Routing und automatisches Laden von Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!