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方法。

你可能感兴趣的:(Class)