PHP框架自动加载类文件原理详解
程序员文章站
2024-03-09 14:54:17
描述:公司项目php用作中间转发层(接收http请求,用 socket跟c++做通信),由于代码没有用到框架,这些东西自然就是之前的人自己写的。最近需要对这个底层进行优化,...
描述:公司项目php用作中间转发层(接收http请求,用 socket跟c++做通信),由于代码没有用到框架,这些东西自然就是之前的人自己写的。最近需要对这个底层进行优化,于是便看了下这部分的代码。
目的:这块代码的主要作用是把主目录下的所有插件类一次性全部加载进来。当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 php 出错失败前有了最后一个机会加载所需的类。
实现方法:主要用到php函数__autoload()
详细:
error_reporting(e_error | e_warning | e_parse | e_notice); set_include_path($_server['root_path'] . '/libs' . path_separator . $_server['root_path'] . '/lib' . path_separator . get_include_path() ); if (!function_exists('__autoload')) { function __autoload($classname) { ///优化包含路径 $path=_getrootpath($classname); $revpath=strtr($classname, '_', '/'). '.php'; $rootpath=$path.$revpath; file_exists($rootpath)?include($rootpath):@include($revpath); } } /** *得到根路径* */ function _getrootpath($classname) { $pearpath=$_server["php_pear_path"].'/'; $libpath=$_server['root_path'] . '/lib/'; $libspath=$_server['root_path'] . '/libs/'; if(strpos($classname,'zend_')===0) return $pearpath; ///zend 框架路径 if(strpos($classname,'db_')===0 || strpos($classname,'interface_')===0 || strpos($classname,'others_')===0 || strpos($classname,'pay_')===0 || strpos($classname,'phpmailer_')===0 ) return $libspath; return $libpath; }
其中_getrootpath($classname)函数获取的是类名文件所在的真实目录,根据类名的头字段判断类在哪个目录下;
如果类能在这些目录下找到,类在使用前就会被加载。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
PHP框架自动加载类文件原理详解
-
PHP面向对象程序设计之命名空间与自动加载类详解
-
php类的自动加载操作实例详解
-
javascript - PHP框架内的控制器能随时用配置文件里的常量,原理是把配置文件加载进来了吗?
-
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间,_PHP教程
-
CI框架中类的自动加载问题分析_php实例
-
PHP框架如何实现自动加载类和类常驻内存的?
-
php类自动加载机制实例详解
-
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间,_PHP教程
-
php中 __autoload函数 自动加载类文件机制