博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP框架自动加载类文件原理
阅读量:5158 次
发布时间:2019-06-13

本文共 1468 字,大约阅读时间需要 4 分钟。

描述:公司项目PHP用作中间转发层(接收http请求,用 socket跟c++做通信),由于代码没有用到框架,这些东西自然就是之前的人自己写的。最近需要对这个底层进行优化,于是便看了下这部分的代码。

目的:这块代码的主要作用是把主目录下的所有插件类一次性全部加载进来。当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

实现方法:主要用到PHP函数__autoload()

详细:

1 error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 2 set_include_path($_SERVER['Root_Path'] . '/libs' . PATH_SEPARATOR . 3                  $_SERVER['Root_Path'] . '/lib' . PATH_SEPARATOR . 4                  get_include_path() ); 5 if (!function_exists('__autoload')) { 6     function __autoload($className) 7     { 8         ///优化包含路径 9         $path=_getRootPath($className);10         $revpath=strtr($className, '_', '/'). '.php';11         $rootpath=$path.$revpath;12         file_exists($rootpath)?include($rootpath):@include($revpath);13     }14 }15 16 /**17  *得到根路径*18  */19 function _getRootPath($classname)20 {21     $pearpath=$_SERVER["PHP_PEAR_PATH"].'/';22     $libpath=$_SERVER['Root_Path'] . '/lib/';23     $libspath=$_SERVER['Root_Path'] . '/libs/';24 25     if(strpos($classname,'Zend_')===0) return $pearpath; ///zend 框架路径26     if(strpos($classname,'DB_')===0 || strpos($classname,'Interface_')===0 || strpos($classname,'Others_')===0  || strpos($classname,'Pay_')===0 || strpos($classname,'PHPMailer_')===0 ) return $libspath;27     return $libpath;28 }

其中_getRootPath($classname)函数获取的是类名文件所在的真实目录,根据类名的头字段判断类在哪个目录下;

如果类能在这些目录下找到,类在使用前就会被加载。

 

转载于:https://www.cnblogs.com/zoie-blog/p/6952075.html

你可能感兴趣的文章
客户端通过HTTP协议与服务端交换数据
查看>>
更新客户信息
查看>>
淘宝,京东,苏宁易购技术架构(路线)分析和比较
查看>>
游戏中的心理学(一):认知失调有前提条件
查看>>
docker的数据持久化
查看>>
setCapture函数的运用
查看>>
Oracle数据库基础(一)
查看>>
SpringMVC-处理AJAX
查看>>
WHAT I READ FOR DEEP-LEARNING
查看>>
【Ruby】Ruby在Windows上的安装
查看>>
Objective C 总结(十一):KVC
查看>>
BZOJ 3747 洛谷 3582 [POI2015]Kinoman
查看>>
vue实战(7):完整开发登录页面(一)
查看>>
[转载]mysql的left,right,substr,instr截取字符串,截取
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
摘抄详细的VUE生命周期
查看>>
javascript高级程序设计---js事件思维导图
查看>>
sprint计划会议
查看>>
读《构建之法-软件工程》第四章有感
查看>>