如何在前端控制器的情况下使用PHP创建命名空间

如何在前端控制器的情况下使用PHP创建命名空间,php,namespaces,Php,Namespaces,好的,我有一个很小的框架,我希望很快就能开源,我正在尝试实现名称空间,这样控制器和模型就不需要附加文本。以下是基本的代码逻辑: url请求 htaccess将重新路由到index.php,后者将启动框架 框架解析路由并确定实例化和触发哪个控制器/操作 框架的前端控制器为“控制器”&项目控制器扩展为“控制器” 因此,为了允许命名控制器,例如: class Foo extends Controller {} 后来的模型是: class Foo extends Model {} 我的目录结

好的,我有一个很小的框架,我希望很快就能开源,我正在尝试实现名称空间,这样控制器和模型就不需要附加文本。以下是基本的代码逻辑:

  • url请求
  • htaccess将重新路由到index.php,后者将启动框架
  • 框架解析路由并确定实例化和触发哪个控制器/操作
    • 框架的前端控制器为“控制器”&项目控制器扩展为“控制器”
因此,为了允许命名控制器,例如:

class Foo extends Controller {}
后来的模型是:

class Foo extends Model {}
我的目录结构如下:

project/
    controllers/
        foo.php
    models/
        foo.php

所以,我显然需要实现名称空间。(是的,我正在运行PHP5.3)。所以我的问题是,如果前端控制器和模型被其他控制器和模型扩展,我将如何实现名称空间?

始终检查php.net

一种方法是假设控制器位于同一个空间中,手动在名称空间前面加上前缀。以下面的例子为例

public function __construct( $controller, $model )
{
    $this->controller = 'Application\Controllers\\' . $controller;
    $this->model      = 'Application\Models\\'      . $model;
}

可能会有一种更自动的方式,但我认为这在大多数情况下已经足够了。请不要引用我的话,但也许您可以使用反射来获取被调用对象的名称空间。但是,这可能仍然需要一个更独特的命名约定,否则自动加载程序仍然不知道您是在调用
Controllers\Index.php
还是
Views\Index.php

我已经阅读了php的名称空间文档(这通常不是给定的吗?),我的问题的本质特定于前端控制器动态加载/启动项目控制器的名称空间。也就是说,我不希望使用该框架的人不得不对project\controllers\Controller进行Foo扩展使用project\controllers\Foo as Foo'是我需要的,但这不是动态的,仍然需要在project controller文件中进行设置。有意义吗?好吧,但我从来没有看到(也没有看到)名称空间的意义。。。只要正确地命名这些类…那么你可能永远不会开发这个应用程序。有超过10门课。事实上,我做了(也做了)。。。只需正确命名它们!我从不需要使用双重名称,因为我的类没有一个做相同的事情(这会浪费我的时间),所以它们有其他名称…这甚至不是一个真正的答案。这个问题非常清楚和简洁,值得注意的不仅仅是一个尖刻的RTFM通知。他要找的不是PHP手册,如果是的话,这不是指出它的合适方式。有兴趣在项目完成时查看项目吗!!