This article mainly introduces the simple routing and class automatic loading functions implemented by PHP. It analyzes the principles and related implementation techniques of PHP routing and class automatic loading in the form of examples. Friends in need can refer to it. I hope it can help everyone. .
The project directory is as follows
Entry file index.php
##
<?php define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test'); require_once(WEBROOT.'/core/environment.php'); core__app::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');
core__app::run() corresponding to the
run() method of the root directory/core/app.php, The
spl_autoload_register() function is used to implement automatic loading. When a certain class name is called,
spl_autoload_register('loader::load') will be automatically executed. According to the class name include the corresponding class file.
<?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); } }
call_user_func_array() method to call the method in the controller
<?php class controller__test { public function write($controller, $method) { //config__test::load('test'); model__test::write($controller, $method); } }
<?php class model__test { public function write($model, $method) { echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method; } }
core__app ::run will find the corresponding controller__test class under the controller and execute the
write() method
How to implement simple PHP Routing
JS method to implement simple router function
JS method to implement simple router function_javascript skills
The above is the detailed content of Implementation code of PHP simple routing and class automatic loading function. For more information, please follow other related articles on the PHP Chinese website!