PHP autoclass 使用
为了实现自动装在类而不用每次都include等操作而制定的机制,实现起来如下:final class Util{
// 定义一个通用的装载方法
static function autoload($class_name){
// echo 'SPL load class:', $class_name, '<br />';
$fullpath = $_SERVER['CONTEXT_DOCUMENT_ROOT'].'/class/'.$class_name.'.class.php';
if ( file_exists($fullpath)){
// easy way 2 do, job as your own way
include_once $fullpath;
}
}
}
// 注册下
spl_autoload_register("Util::autoload");
由于PHP提供了默认的全局__autoload魔术方法,如果之前定义了__autoload的话,如:
function __autoload($classname){
// do something like include_once, require_once, etc
}
此时调用,spl_autoload_functions 会获得一个autoload的方法数组,__autoload赫然在列,上面的Util::autoload会紧随其后,其机制是会根据注册的顺序轮流执行,直到找到new的类为止。
这样的话,在调用new 生成对象时就会适当载入相关对象,如:
$skillService = new SkillService();
这个例子中会调用Util::autoload方法,找到$fullpath指定的位置下的SkillService定义文件并加载至,你的路径可能是这样:D:/web-root/class/SkillService.class.php。
不错!至少我们不用每次都手动的引入文件了。
值得注意的是此系列方法源自php 5.1.2以后的版本。
另外,有函数 spl_autoload_extensions 可以和 spl_autoload 一起搭配使用,如:
// 以,分割的扩展名字符串
spl_autoload_extensions(‘.php, .class.php’);
// 自动载入相应的类,默认的__autoload实现,但配合了上面的方法
spl_autoload($ClassName);
其他的spl相关方法还有,spl_autoload_unregister 用来卸载相应的autoload方法。
页:
[1]