您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP实现路由与类自动加载步骤详解

2025/11/3 21:41:58发布15次查看
这次给大家带来php实现路由与类自动加载步骤详解,php实现路由与类自动加载步骤详解的注意事项有哪些,下面就是实战案例,一起来看一下。
项目目录如下
入口文件index.php
<?php define('webroot', 'c:/users/administrator/documents/netbeansprojects/test'); require_once(webroot.'/core/environment.php'); coreapp::run(); //
类自动加载文件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');
我这里类的加载规则是 比如coreapp::run() 对应 根目录/core/app.php 的 run()方法,用到了spl_autoload_register()函数实现自动加载,当调用某个类名的时候,会自动执行spl_autoload_register('loader::load'),根据类名include对应的类文件。
app.php入口文件执行的方法开始跑框架流程
<?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);   } }
根据请求uri去找对应的controller, 用call_user_func_array()的方式调用controller里的方法
根目录/controller/test.php
这里其实调用不一定要调用model里的test方法,可以调model目录下的任意文件,在此之前可以去都读一些config文件等等操作。
根目录/model/test.php
例如hostname/test/write 这个请求就会从入口文件进来,经过coreapp::run就会找到controller下对应的的controllertest类,执行write()方法
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
laravel框架实现搜索功能代码解析
php实现生成推广海报步骤详解
以上就是php实现路由与类自动加载步骤详解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product