Dieses Mal werde ich Ihnen die Schritte zum Implementieren von Routing und automatischem Laden von Klassen ausführlich erläutern. Was sind die Vorsichtsmaßnahmen und im Folgenden finden Sie praktische Beispiele .
Das Projektverzeichnis lautet wie folgtEintragsdateiindex.php
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); coreapp::run(); //
<?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');
-Methode im Stammverzeichnis/core/app.php. Die Funktion coreapp::run()
wird verwendet, um das automatische Laden zu implementieren aufgerufen, run()
wird automatisch ausgeführt Der Klassenname enthält die entsprechende Klassendatei. spl_autoload_register()
spl_autoload_register('loader::load')
Die Ausführungsmethode der app.php-Eintragsdatei startet die Ausführung des Framework-Prozesses
<?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 verwenden Sie die Methode
, um die Methode aufzurufen der Controllercall_user_func_array()
Stammverzeichnis/controller/test.php
<?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 jede Datei im Modell aufrufen Zuvor können Sie einige Konfigurationsdateien usw. lesen.
Stammverzeichnis/model/test.php
<?php class modeltest { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }
Zum Beispiel Hostname/test/write, diese Anfrage kommt aus der Eintragsdatei und nach
finden Sie die Führen Sie die entsprechende Controllertest-Klasse unter dem Controller aus und führen Sie die Methodecoreapp::run
aus. Ich glaube, Sie haben die Methode beherrscht, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln zum PHP-Chinesen Webseite! write()
Laravel-Framework-Implementierung der Suchfunktionscodeanalyse
Detaillierte Erläuterung der Schritte zur Generierung von Werbeplakaten in PHP
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte zur Implementierung von Routing und automatischem Laden von Klassen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!