我最近开始用 PHP 编写自定义 MVC 框架。这基本上是一个学习练习。
我的课程位于以下目录中:
- 系统/库/
- 系统/控制器/
- 系统/型号
- 应用程序/库/
- 应用程序/控制器/
- 应用/模型
我没有使用命名空间,因为我不知道如何使用命名空间和 Apache 2 处理程序样式 URL(控制器/操作/id)来实例化控制器。我创建了一个 Bootstrap 类来自动加载我的其他类:
class Bootstrap
{
public function autoloadClasses($class)<br/>
{
$class .= '.php';
$classDirectories = array(
SYSTEM_LIBS_DIR,
SYSTEM_CONTROLLERS_DIR,
SYSTEM_MODELS_DIR,
APPLICATION_LIBS_DIR,
APPLICATION_CONTROLLERS_DIR,
APPLICATION_MODELS_DIR
);
foreach ($classDirectories as $classDirectory) {
$directoryIterator = new DirectoryIterator($classDirectory);
foreach($directoryIterator as $file) {
if ($file == $class) {
include $classDirectory . $class;
break 2;
}
}
}
}
public function register()
{
spl_autoload_register(array($this, 'autoloadClasses'), true);
}
public function init()
{
$this->register();
$loader = new Loader($_GET);
$controller = $loader->createController();
$controller->executeAction();
}
}
它工作正常。但是,我知道我真的应该使用 PSR-0 推荐的实现:
https://gist.github.com/221634
However, I can't figure out how to get it to work without namespaces. It looks like the namespace is an optional pararmeter. However, if I do the following, nothing happens -- not even an error in the Apache logs:
$libLoader = new SplClassLoader('', 'system/libraries');