Home > Article > Backend Development > Detailed explanation of the steps to implement routing and class automatic loading in PHP
This time I will bring you a detailed explanation of the steps to implement routing and automatic loading of classes in PHP. What are the precautions and the following are practical cases. , let’s take a look.
The project directory is as followsEntry fileindex.php
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); coreapp::run(); //The class automatically loads the file 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');My class here The loading rule is, for example,
coreapp::run() The
run() method corresponding to the root directory/core/app.php uses the
spl_autoload_register() function To implement automatic loading, when a certain class name is called,
spl_autoload_register('loader::load') will be automatically executed to include the corresponding class file according to the class name.
<?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); } }Find the corresponding controller according to the request uri, and use
call_user_func_array() to call the controller Method
<?php class controllertest { public function write($controller, $method) { //configtest::load('test'); modeltest::write($controller, $method); } }In fact, the call here does not necessarily have to call the test method in the model. You can call any file in the model directory. Before that, you can go to Read some config files and other operations. Root directory/model/test.php
<?php class modeltest { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }For example, the request hostname/test/write will come in from the entry file and will be found after
coreapp::run The corresponding controllertest class under the controller executes the
write()method
Laravel framework implementation of search function code analysis
Detailed explanation of the steps to generate promotion posters in PHP
The above is the detailed content of Detailed explanation of the steps to implement routing and class automatic loading in PHP. For more information, please follow other related articles on the PHP Chinese website!