发布于 4年前

PHP类自动加载spl_autoload_register()

在PHP有两种方式实现类的自动加载:__autoload()和spl_autoload_register()。但由于__autoload()是我们自己定义的函数,它只允许被定义一次,这样很容易导致冲突,显得很不灵活,php 7已经把__autoload()废弃。spl_autoload_register()是spl标准库提供的函数,它允许我们多次调用,根据需要加载多个不同的autoloader。

示例:

<?php
spl_autoload_register('myAutoloader');

function myAutoloader($className)
{
    $path = '/path/to/class';

    include $path.$className.'.php';
}
$myClass = new MyClass();
?>

spl_autoload_register()函数注册了我们自定义的自动加载器myAutoloader。当我们声明的类,如MyClass找不到时,它会在注册的自动加载器里,根据加载器定义的规则加载文件。myAutoloader是一个函数,它接收类名作为参数,它会在指定的路径下加载$className.php文件。

注册多个类自动加载器

spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');

class MyAutoloader
{
    public static function ClassLoader($className)
    {
         //加载类的逻辑代码
    }

    public static function LibraryLoader($className)
    {
         //加载类的逻辑代码
    }

    public static function HelperLoader($className)
    {
         //加载类的逻辑代码
    }

    public static function DatabaseLoader($className)
    {
         //加载类的逻辑代码
    }
}

配置spl_autoload_register()

如果我们加载的类在同一个目录下,我们可以直接调用spl_autoload_register(),不需要指定类加载器。

set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
  • set_include_path:设置类的根路径
  • spl_autoload_extensions:指定加载文件的后缀
PHP
©2020 edoou.com   京ICP备16001874号-3