【发布时间】:2014-04-11 07:36:44
【问题描述】:
我正在构建一个 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() 中回显的字符串确实在错误之后得到回显。
所以简而言之,根据错误没有找到文件,但这是因为我可以看到我让类函数打印的回声。
有什么想法吗?
还有我的前端模块文件结构,这是否会使自动加载变得非常困难,因为每个模块以及其中的每个控制器/模型/视图文件都需要不同的自动加载功能?我需要为每个模块提供单独的自动加载功能吗?如果没有,我会怎么做?
谢谢 汤姆
【问题讨论】:
-
你的配置文件在哪里。另外,尝试添加插件功能。如果您希望发布该框架以供公众使用,则在稍后阶段将需要这样做
-
没有真正回答您的特定问题,但在自动加载方面您确实应该查看 PSR-0(也许还有 PSR-4)。如果你这样做了,那么你将能够将其他符合 PSR 的框架词混合并匹配到你的框架中(反之亦然)。 php-fig.org/psr/psr-0
-
你应该开始使用命名空间(PSR-0 会给你一些从哪里开始的方向).. 并且停止在你的文件名中使用
.class,因为不是所有你加载的东西都是类。
标签: php autoloader spl-autoload-register file-structure