php实现自动加载方式集合

作者:Liaodeity - 2016年04月11日

        在一些php常规方法加载有使用到include,include_once,requice,requice_one方法,但是当载入的文件太多的时候,这个就会引起一些不必要的麻烦,所以我们要使用到自动加载的方法。

一些例子实现,我写到了附件中,可以下载查看

spl_autoload_register()

官网建议使用该方法来实现,该方法可以灵活实现载入功能。可以多次调用,所以可以解决一些不同编写规则、类名规则等问题。

方法一:

/**
 * spl_autoload_register()自动加载 代码
 * www.jianbaizhan.com 编写
 * spl_autoload_register可以多次调用,所以可以解决一些不同的类库规范问题(目录不同、文件命名不同等)
 */
define('LIB_PATH',__DIR__.'/Library/');//定义类库的目录
function my_autoload($class){
    $file = LIB_PATH.$class.'.php';
    if(is_file($file)) {
        require_once($file);
    }
}
spl_autoload_register('my_autoload');
spl_autoload_register(function($class){// 自 PHP 5.3.0 起可以使用一个匿名函数
    $file = LIB_PATH.'Test/'.$class.'.php';
    if(is_file($file)) {
        require_once($file);
    }
});
$a = new A();

$b = new C();

方法二:

    

/**
 * spl_autoload_register()自动加载 代码
 * www.jianbaizhan.com 编写
 * spl_autoload_register可以多次调用,所以可以解决一些不同的类库规范问题(目录不同、文件命名不同等)
 * 通过一个类来定义多个加载方法规则
 */
define('LIB_PATH',__DIR__.'/Library/');//定义类库的目录
class Loader {  
    public static function my_autoload_one($class){  
        $file = LIB_PATH.$class.'.php';
        if(is_file($file)) {
            require_once($file);
        }
    }
      public static function my_autoload_two($class){
        $file = LIB_PATH.'Test/'.$class.'.php';
        if(is_file($file)) {
            require_once($file);
        }
    }
}
// 自 PHP 5.3.0 起可以使用
spl_autoload_register(array('Loader', 'my_autoload_one'));
spl_autoload_register(array('Loader', 'my_autoload_two'));
$a = new A();
$b = new C();

__autoload()

只能定义一次该方法

官方Tip spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

/**
 * __autoload()自动加载 代码
 * www.jianbaizhan.com 编写
 * 建百站提示你 该方法官方文档已不再建议使用,在以后的版本中它可能被弃用。 建议使用spl_autoload_register() 
 */
define('LIB_PATH',__DIR__.'/Library/');//定义类库的目录
function __autoload($class){
    $file = LIB_PATH.$class.'.php';
    if(is_file($file)) {
        require_once($file);
    }
}
$a = new A();
$b = new B();


本文作者: Liaodeity

本文链接: https://www.jianbaizhan.com/article/385

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!


 请勿发布不友善或者负能量的内容。审查将对发布广告等违规信息进行处罚!