spl_autoload_register()包含多个文件夹

时间:2013-01-08 22:50:59

标签: php autoload

我正在使用以下代码段从多个文件夹中自动加载类:

// Check if the autoload configuration file exists
if(is_file("configuration/autoload")) {
    // Extract the listed folders from the configuration file
    $folders = explode("\n", file_get_contents("configuration/autoload"));
    // Prepend the base path to the extracted folder paths
    array_unshift($folders, get_include_path());
    // Configure the folders in which to attempt class autoloading
    set_include_path(implode(PATH_SEPARATOR, $folders));
    // Configure the file extensions that should be autoloaded
    spl_autoload_extensions(".php");
    // Administer the attempt to autoload classes
    spl_autoload_register();
}

几个文件夹列在如下文件中:

core/utility
core/factory
core/modules
core/classes
core/classes/form
core/classes/form/fields
frontend

它在本地就像魅力一样,但我无法让它在我的在线服务器上工作(我做了CHMOD所有文件和文件夹)。我想在设置包含路径时出现问题,但我似乎无法绕过它。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

我建议你创建自己的自动加载功能i.n.我的自动加载器。这样您就可以完全控制文件夹处理。

function my_autoloader($className)
{
    $parts = explode('\\', $className); //split out namespaces
    $classname = strtolower(end($parts)); //get classname case insensitive (just my choice)

        //TODO: Your Folder handling which returns classfile

    require_once($loadFile); 
}
spl_autoload_register(__NAMESPACE__ . '\my_autoloader');

请记住处理不同的命名空间

答案 1 :(得分:0)

Magento电子商务就是这样做的:

function __autoload($class)
{
    if (defined('COMPILER_INCLUDE_PATH')) {
        $classFile = $class.'.php';
    } else {
        $classFile = uc_words($class, DIRECTORY_SEPARATOR).'.php';
    }

    include($classFile);
}

然后你将拥有以下结构:

class Company_Category_Class{}

以下限制(假设您的包含路径中包含“lib”):

./lib/Company/Category/Class.php

如果您有任何问题,请与我们联系。