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(); //
<?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');
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); } }
call_user_func_array() to call the controller Method
<?php class controllertest { public function write($controller, $method) { //configtest::load('test'); modeltest::write($controller, $method); } }
<?php class modeltest { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }
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!