php基于namespace的类自动加载
来源:互联网 发布:淘宝直播镜像 编辑:程序博客网 时间:2024/06/17 07:46
PhpStorm中设置命名空间
Loader.php
<?phpnamespace MVC;class Loader{ public static function autoload($namespace){ $path = trim(str_replace(__NAMESPACE__,"",$namespace),DIRECTORY_SEPARATOR).".php"; if(is_file($path)){ //echo "Load File : ".$path; require $path; }else{ //echo "Not Found : ".$path; } }}spl_autoload_register(__NAMESPACE__ .'\Loader::autoload');
之前开发过的MVC的路由模块,采用的方式是将URL字符串进行分割,然后分析得到其中的文件夹部分和类名部分,再组合成path进行加载。其实更好的方式是采用命名空间进行加载,对于Model和Service等部分的class可以直接使用完整的命名空间进行调用,对于Controller的命名空间可以通过分析URL得到。
Router.php
<?phpnamespace MVC;require "Loader.php";class Router{ public static function init(){ $path = isset($_SERVER['PATH_INFO'])? $_SERVER['PATH_INFO']:null; $path = str_replace("index.php/",'',$path); $path = trim($path,"/"); $prefix = "./Controller/"; $suffix = "Controller.php"; $defaultController = "Home"; $defaultFunction = "Index"; $path00 = str_replace("//","/",$prefix.$path."/".$defaultController.$suffix); $path10 = $prefix.$path.$suffix; if(is_file($path00)){ $function = $defaultFunction; $space = str_replace(["./",".php"],"",$path00); $namespace = __NAMESPACE__."\\".str_replace("/","\\",$space); $obj = new $namespace(); $obj->$function(); }elseif (is_file($path10)){ $function = $defaultFunction; $space = str_replace(["./",".php"],"",$path10); $namespace = __NAMESPACE__."\\".str_replace("/","\\",$space); $obj = new $namespace(); $obj->$function(); }elseif (strpos($path,"/")){ $arr = explode("/",$path); $len = count($arr); $function = $arr[$len-1]; unset($arr[$len-1]); $path11 = $prefix.implode("/",$arr).$suffix; if(is_file($path11)){ $space = str_replace(["./",".php"],"",$path11); $namespace = __NAMESPACE__."\\".str_replace("/","\\",$space); $obj = new $namespace(); $obj->$function(); }else{ http_response_code(404); } }else{ http_response_code(404); } }}Router::init();
阅读全文
0 0
- php基于namespace的类自动加载
- PHP命名空间 namespace 和 自动加载
- PHP类的自动加载
- php的自动加载类
- php类的自动加载
- PHP类的自动加载
- PHP类的自动加载
- PHP的自动加载
- php 自动加载类
- PHP自动加载类
- PHP 自动加载类
- PHP 自动加载类
- PHP 类自动加载
- PHP自动加载类
- php自动加载类
- PHP:自动加载类
- PHP类的自动加载__autoload && spl_autoload_register
- PHP的类自动加载机制
- Ubuntu 16.04 64位+Qt 5.7.1+opencv 3.2.0 + opencv_contrib 3.2.0
- Maven命令安装jar包到本地仓库
- 零基础转行学习计划
- [猎豹网校 Lua] 第二课.HelloLua
- python爬虫学习
- php基于namespace的类自动加载
- 3.4
- 我的学习记录61
- 【Java】——http中get和post请求的区别
- python求素数
- git版本管理软件——搭建git服务器
- PL/SQL 基本语法
- 音乐信号处理权威会议
- 数据库事务 ACID 和 隔离级别