我刚开始在我的应用中使用自动加载器延迟加载,而且我正在与命名空间发生冲突。自动加载器正在尝试加载new DateTime()
之类的内容并失败。是否有一个技巧让我的自动加载器特定于我自己的命名空间类?
这是我目前的代码。我怀疑它是一团糟,但我没有看到如何纠正它:
<?php namespace RSCRM;
class Autoloader {
static public function loader($className) {
$filename = dirname(__FILE__) .'/'. str_replace("\\", '/', $className) . ".php";
if (file_exists($filename)) {
include_once($filename);
if (class_exists($className)) {
return TRUE;
}
}
return FALSE;
}
}
spl_autoload_register('\RSCRM\Autoloader::loader');
如果有人可以指出一个可靠的例子,那么RTM很高兴。
答案 0 :(得分:1)
我使用的是实际改编自用于单元测试的自动加载器的一些AuraPHP库:
<?php
spl_autoload_register(function ($class) {
// a partial filename
$part = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php';
// directories where we can find classes
$dirs = array(
__DIR__ . DIRECTORY_SEPARATOR . 'src',
__DIR__ . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR . 'src',
__DIR__ . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'src',
);
// go through the directories to find classes
foreach ($dirs as $dir) {
$file = $dir . DIRECTORY_SEPARATOR . $part;
if (is_readable($file)) {
require $file;
return;
}
}
});
确保&#39; $ dirs&#39;值指向命名空间代码的根。
您还可以查看PSR-0示例实现(http://www.php-fig.org/psr/psr-0/)。
您可能还想查看现有的自动加载器,例如Aura.Autoload或Symfony ClassLoader组件,尽管根据您的要求可能会出现过度杀伤。
我希望这会有所帮助。