我正在构建一个 MVC PHP 框架,并且在自动加载我的类时遇到了一些问题,我认为这可能与我的文件结构有关。
首先,这是我的文件结构:
我在 Xampp 本地服务器环境中测试开发,所以这就是我拥有私有和公用文件夹的原因。最终在实时服务器上,私有文件夹将位于服务器根目录中,而公用文件夹将位于 public_html 目录中。
我的文件结构看起来对吗?在私有的前端文件夹中,我将所有不同的模块放在目录中,这些模块又具有控制器、模型、视图文件,这些文件包含每个模块的必要文件。
到目前为止,我已经创建了这个自动加载器:
//Require config and router classes
require_once('router.class.php');
require_once('config.php');
spl_autoload_register(null, false);
spl_autoload_extensions('.class.php');
function autoloader_core($class){
$filename = strtolower($class) . '.class.php';
if(!file_exists($filename)){
echo $filename . " not found";
}
include $filename;
}
function autoloader_app($class){
$filename = strtolower($class) . '.class.php';
$file = 'C:\xampp\htdocs\simplebids\simplebidsprivate\app/' . $filename;
if(!file_exists($file)){
echo $file . " not found";
}
include $file;
}
spl_autoload_register('autoloader_core');
spl_autoload_register('autoloader_app');
$router = new test;
$router->say_hello();
这对于 lib->core 目录中的类非常有效,但是当我尝试实例化一个新的测试类时,我得到了关于在 lib->core 文件中找不到 test.class.php 文件的各种错误,它显然不是,但我认为自动加载器函数会在我自己在“autoloader_app”函数中定义的路径中查找。
有趣的是,即使我得到了所有这些错误,我在测试函数 say_hello() 中回显的字符串确实在错误之后得到回显。
所以简而言之,没有根据错误找到文件,但这是因为我可以看到我制作的类函数打印的回声。
任何想法为什么?
还有我的前端模块文件结构,这是否会使自动加载变得非常困难,因为每个模块都需要不同的自动加载功能,然后是其中的每个控制器/模型/视图文件?我需要为每个模块提供单独的自动加载功能吗?如果不是,我会怎么做?
谢谢汤姆