PHP'的spl_autoload_register在哪里只被调用,为什么它比include更好


Where is PHP's spl_autoload_register only called and why is it better than include?

是否在引用给定类的每个.php文件的顶部?我什么时候不想使用spl_autoload_register() ?

我在SO上看到一个关于效益的问题。我不确定它是否回答了我的问题。

如果我有一个。php文件,它有十个include。这是十行。当我从这里看这个的时候,听起来还不错:

<?php
function autoload($className)
{
    $className = ltrim($className, '''');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '''')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('''', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
    require $fileName;
}

是因为一些PHP程序有50个类,而命名约定使它变得容易吗?

Include意味着您必须指定加载哪些文件。例如,当一个文件是过程性的并且在类结构之外时,可以包含它。

Autoload意味着你有一个函数可以在你需要的时候为你加载文件。当与名称空间和匹配文件路径的文件结合使用时,它是一个非常强大的工具。

例如,你可以在/my/namespace/class.php中创建'My'Namespace'Class,当你这样做时,自动加载器将加载它

$class = new 'My'Namespace'Class();

不,它不应该在每个。php类文件的顶部,你必须在应用程序启动时包含它。

它看起来像是新实例化类的观察者,如果类文件不包含,那么autloader函数将包含它以使类可用,这将节省大量消耗的时间,同时包含硬编码文件。

所以如果你已经建立了一个类,比如new 'MyNameSpace'CustomClass,自动加载器会查找文件夹/MyNameSpace/CustomClass.php并包含它