php包管理机制-支持php5.3的方法
来源:互联网 发布:网络电影情谊无悔观看 编辑:程序博客网 时间:2024/05/06 16:59
原创文章,转载请注明: 转载自始终不够
本文链接地址: php包管理机制-支持php5.3的方法
转载请注明:始终不够 » php包管理机制-支持php5.3的方法
composer作为目前主流的php包管理器,使得我们组合不同功能的php代码非常容易,开发也可以更专注某一个模块了。而composer要求我们的php版本不低于php5.3,虽然php5.3也能跑,但不保证不会有问题。而相信目前国内很多公司的php版本仍然停留在php5.3以下的时代,或者由于自身实现了autoload,很难与composer组合到一起,虽然对composer的功能很喜欢,但也只能望而却步。
我们接触最多的php开发,就是MVC了,我们一般只需要编写M、V、C的代码即可,这些框架一般都有提供。但如果框架如果不是很强大的话,例如我们希望在写错误日志的同时,发送报警,相信会有一些框架难以做到这一点。为此你不得不再编写一些helper工具类来帮你实现你想要的。类似的场景会有很多,系统复杂度越高,我们需要的就越多,而框架就有可能在这个时候显得力不从心。
解决上面的问题,我们需要能够灵活的向框架中注入不同的模块,而不影响现有的代码。如何实现呢?spl_autoload_register()函数能够帮我们做到这一点。
下面我假设一个场景,然后利用spl_autoload_register()函数完成我们的模块注入。
假设,我们有一个php5.2的项目,非常复杂,autoload自动加载会扫描很多目录,同时会做autoload缓存,以便提升autoload性能。
如果我们添加一个功能包,除了修改__autoload函数外,我们还可以使用spl_autoload_register,这个函数像是一个注册器,每次调用,都会在一个注册树上注册一个autload函数,当你需要使用一个尚未载入的class时,php会自动从注册树顶部开始调用你所注册的autoload函数,直到找到你要载入的类为止。
利用spl_autoload_register的这个功能,我可以首先要做的事情就是修改我们的__autoload函数,因为如果你使用了__autoload函数,则会清空注册树上的函数。我们必须把我们之前编写的autoload函数同样的注册到注册树上才可以与其他autoload共存。具体看如下示例。
首先假设我们系统的__autoload函数类似如下:
function
__autoload(
$class_name
){
$filename
= FRAMEWORK_DIR .
'/'
.
$class_name
.
'.class.php'
;
if
(
file_exists
(
$filename
)){
require
$filename
;
}
}
我们只需要做如下修改即可:
function
myAutoload(
$class_name
){
$filename
= FRAMEWORK_DIR .
'/'
.
$class_name
.
'.class.php'
;
if
(
file_exists
(
$filename
)){
require
$filename
;
}
}
spl_autoload_register(
'myAutoload'
);
做完这一步,你可以测试你的系统能否正常运行,至此我们完成了第一步。
下面我们需要注入我们想使用的包,假设我们在github上找到了一个不错的包,但是它需要命名空间支持,所以我们做了些修改,去掉了命名空间。我们希望把这个包注入到我们的系统中。
我们需要做的就是为这个包编写一个autoload函数,然后调用spl_autoload_register()函数,把它注册到注册树上。类似如下:
function
githubPackageAutoload(
$class_name
){
$filename
= GITHUB_PACKAGE_PATH .
'/'
.
$class_name
.
'.class.php'
;
if
(
file_exists
(
$filename
)){
require
$filename
;
}
}
spl_autoload_register(
'githubPackageAutoload'
);
至此我们完成了php功能包的注入。
- php包管理机制-支持php5.3的方法
- WAMPSERVER增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- PHP之——在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- PHP5.4 for Apache ; php 5.4.0安装过程、方法、配置 ; Apache2.2支持php5.4的配置方法
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)完美支持。
- slackware包的管理机制
- php5.3增加sqlserver2008的支持
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。
- php5.3终于支持require_once("/classes/class.php");了
- 在WAMPSERVER下增加多版本的PHP(PHP5.4,PHP5.6)支持
- IIS支持PHP的方法
- 获取本机外网ip获取位置
- PHP异步并发访问mysql简单实现
- 如何营造游戏的打击感(一)
- 随笔
- 字符串之把char类型组成的字符串循环右移n位
- php包管理机制-支持php5.3的方法
- 如何营造游戏的打击感(二):连续打击
- Reactor Pattern Explained
- Intent以及onActivityResult方法的使用
- flume:支持重命名、移动文件的roll file sink升级版
- C语言基础知识之(十九):内存操作的其他函数:内存初始化,内存拷贝,内存比较
- 利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个提示灯依次一个一个闪动,闪动频率为10次每秒(8个灯亮一遍为一个周期),循环
- UVA 1612 Guess
- 精通Hibernate——Hibernate的两种映射类型说明