描述:公司项目PHP用作中间转发层(接收http请求,用 socket跟c++做通信),由于代码没有用到框架,这些东西自然就是之前的人自己写的。最近需要对这个底层进行优化,于是便看了下这部分的代码。
目的:这块代码的主要作用是把主目录下的所有插件类一次性全部加载进来。当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
实现方法:主要用到PHP函数__autoload()
详细:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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)函数获取的是类名文件所在的真实目录,根据类名的头字段判断类在哪个目录下;
如果类能在这些目录下找到,类在使用前就会被加载。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。
相关文章
猜你喜欢
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-24 44
-
2025-05-29 15
-
2025-05-25 86
-
2025-06-05 36
-
2025-05-27 25
热门评论