`
再逢山水
  • 浏览: 156298 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spl_autoload_register 函数详解

    博客分类:
  • LAMP
 
阅读更多
spl_autoload_register
(PHP 5 >= 5.1.2)

spl_autoload_register — 注册__autoload()函数

说明
bool spl_autoload_register ([ callback $autoload_function ] )
将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。

如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload() 或 spl_autoload_call()。

参数
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数spl_autoload()。

返回值
如果成功则返回 TRUE,失败则返回 FALSE。

注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。

classLOAD
{
 staticfunctionloadClass($class_name)
    {
        $filename= $class_name.".class.php";
 $path= "include/".$filename
        if(is_file($path)) returninclude$path;
    }
}
 
/**
 * 设置对象的自动载入
 * spl_autoload_register — Register given function as __autoload() implementation
 */
spl_autoload_register(array('LOAD', 'loadClass'));
 
/**
*__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list
*/
spl_autoload_register( '__autoload');


如果同时用spl_autoload_register注册了一个类的方法和__autoload函数,
那么,会根据注册的先后,如果在第一个注册的方法或函数里加载了类文件,就不会再执行第二个被注册的类的方法或函数。反之就会执行第二个被注册的类的方法或函数。

<?php  
class autoloader {  
    public static $loader;  
      
    public static function init() {  
        if (self::$loader == NULL)  
            self::$loader = new self ();  
          
        return self::$loader;  
    }  
      
    public function __construct() {  
        spl_autoload_register ( array ($this, 'model' ) );  
        spl_autoload_register ( array ($this, 'helper' ) );  
        spl_autoload_register ( array ($this, 'controller' ) );  
        spl_autoload_register ( array ($this, 'library' ) );  
    }  
      
    public function library($class) {  
        set_include_path ( get_include_path () . PATH_SEPARATOR . '/lib/' );  
        spl_autoload_extensions ( '.library.php' );  
        spl_autoload ( $class );  
    }  
      
    public function controller($class) {  
        $class = preg_replace ( '/_controller$/ui', '', $class );  
          
        set_include_path ( get_include_path () . PATH_SEPARATOR . '/controller/' );  
        spl_autoload_extensions ( '.controller.php' );  
        spl_autoload ( $class );  
    }  
      
    public function model($class) {  
        $class = preg_replace ( '/_model$/ui', '', $class );  
          
        set_include_path ( get_include_path () . PATH_SEPARATOR . '/model/' );  
        spl_autoload_extensions ( '.model.php' );  
        spl_autoload ( $class );  
    }  
      
    public function helper($class) {  
        $class = preg_replace ( '/_helper$/ui', '', $class );  
          
        set_include_path ( get_include_path () . PATH_SEPARATOR . '/helper/' );  
        spl_autoload_extensions ( '.helper.php' );  
        spl_autoload ( $class );  
    }  
 
}  
 
//call  
autoloader::init ();  
?>  
分享到:
评论

相关推荐

    PHP中spl_autoload_register()函数用法实例详解_.docx

    `spl_autoload_register()`函数本身不返回任何值,但可以传递一个可选参数`$autoload_function`,用于指定要注册的自动加载函数。如果省略这个参数,PHP会自动注册`spl_autoload()`。值得注意的是,`spl_autoload_...

    spl_autoload_register与autoload的区别详解

    spl_autoload_register(PHP 5 &gt;= 5.1.2)spl_autoload_register — 注册__autoload()函数说明bool spl_autoload_register ([ ...因为spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload

    PHP中spl_autoload_register()函数用法实例详解

    需要注意的是,如果你的代码中已经有了 `__autoload` 函数,你需要将其显式地注册到自动加载栈中,因为 `spl_autoload_register()` 会替换掉 Zend Engine 中的 `__autoload` 函数。 SPL(Standard PHP Library)是...

    php中spl_autoload详解

    为了使 `spl_autoload` 自动起作用,你需要使用 `spl_autoload_register` 函数。`spl_autoload_register` 注册一个或多个自动加载函数到一个内部维护的队列中。当你首次调用 `spl_autoload_register()` 且不传递参数...

    PHP中spl-autoload-register()函数用法实例详解-.docx

    PHP 中 spl_autoload_register() 函数用法实例详解 PHP 中的自动加载机制是指在实例化一个未定义的类时,系统自动加载该类的类文件。spl_autoload_register() 函数是 PHP 中的一个自动加载函数,用于注册自动加载...

    PHP中spl-autoload-register()函数用法实例详解-.pdf

    PHP 中 spl_autoload_register() 函数用法实例详解 spl_autoload_register() 函数是 PHP 中用于自动加载类的函数,作用类似于 __autoload 函数。下面我们将详细介绍 spl_autoload_register() 函数的用法实例。 一...

    php __autoload自动加载功能详解

    spl_autoload_register('autoload_function'); ``` 在这个例子中,`$class_name`是未定义的类名,我们将其转换为文件路径,然后尝试包含对应类的文件。如果文件不存在,将输出错误信息。 三、大写字母位置查找算法...

    PHP文件自动加载

    `spl_autoload_register()` 是PHP 5.3引入的一种更灵活的自动加载机制,它可以注册多个自定义的自动加载函数,并且可以提供更加灵活的类文件搜索策略。 **1. 基础用法** ```php // 注册自动加载函数 spl_autoload_...

    详解PHP文件的自动加载(autoloading)

    替代__autoload()函数的是spl_autoload_register()函数,它允许注册多个自动加载函数,这极大地方便了项目中的自动加载机制设置。spl_autoload_register()可以接受一个回调函数、一个全局函数名、一个类的静态方法...

    PHP autoload使用方法及步骤详解

    另外,从PHP5.3开始,推荐使用 `spl_autoload_register` 函数替代 `__autoload`,因为 `spl_autoload_register` 允许注册多个自动加载函数,增加了灵活性和可扩展性。这对于大型项目或者使用第三方库时尤其有用,...

    php类的自动加载操作实例详解

    `spl_autoload_register` 也可以接受方法(类的成员函数)作为参数,例如: ```php spl_autoload_register(array($this, 'model')); spl_autoload_register(array(__CLASS__, 'controller')); ``` 这里,`$this` ...

    PHP自动加载机制实例详解

    2. spl_autoload_register函数:由于__autoload函数只能定义一个,这显然无法满足大型项目中多种类加载需求的情况。因此,PHP 5.3引入了spl_autoload_register函数,它允许注册多个自动加载函数,从而可以定义多种...

    深入PHP autoload机制的详解

    1. spl_autoload_register()函数:这是一个PHP内置函数,它允许开发者注册一个或多个自定义的自动加载函数。PHP会按照注册顺序依次调用这些函数,直到找到一个类定义。使用此函数是实现autoload机制的主要方式。 2. ...

    PHP命名空间与自动加载类详解

    PHP提供了一个魔术方法__autoload()用于自动加载类文件,但PHP5.3后,建议使用spl_autoload_register()函数。 __autoload()函数在需要实例化一个尚未被定义的类时被PHP调用,它接收一个包含类名的字符串作为参数。...

    PHP框架自动加载类文件原理详解

    不过,随着PHP的版本发展,推荐使用更现代的`spl_autoload_register()`函数替代`__autoload()`,因为它允许注册多个自动加载函数,并且更易于管理和扩展。此外,配合PSR-4或PSR-0等命名规范,可以实现更高效的自动...

Global site tag (gtag.js) - Google Analytics