我正在使用以下代码段从多个文件夹中自动加载类:
// 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所有文件和文件夹)。我想在设置包含路径时出现问题,但我似乎无法绕过它。
有什么想法吗?
由于
答案 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
如果您有任何问题,请与我们联系。