菲律宾比索 spl_autoload_register

2022-08-30 14:50:17

我正在尝试利用PHP中的自动加载。我在不同的目录中有各种类,所以我引导了自动加载,如下所示:

function autoload_services($class_name)
{
    $file = 'services/' . $class_name. '.php';
    if (file_exists($file))
    {
        require_once($file);
    }
}

function autoload_vos($class_name)
{
    $file = 'vos/' . $class_name. '.php';
    if (file_exists($file))
    {
        require_once($file);
    }
}

function autoload_printers($class_name)
{
    $file = 'printers' . $class_name. '.php';
    if (file_exists($file))
    {
        require_once($file);
    }
}

spl_autoload_register('autoload_services');
spl_autoload_register('autoload_vos');
spl_autoload_register('autoload_printers');

一切似乎都很好,但我只是想仔细检查一下,这确实被认为是可以接受的做法。


答案 1

当然,看起来不错。您唯一可以做的就是按照它们最有可能命中的顺序注册它们。例如,如果您最常用的类在服务中,然后是vos,然后是打印机,那么您拥有的顺序是完美的。这是因为它们按顺序排队和调用,因此通过执行此操作,您将获得稍好的性能。


答案 2

您可以使用:

set_include_path(implode(PATH_SEPARATOR, array(get_include_path(), './services', './vos', './printers')));
spl_autoload_register();

使用不带参数的spl_autoload_register将注册spl_autoload这将在包含路径的目录中查找类名。请注意,这将在文件系统上查找类名之前将其小写。


推荐