【问题标题】:PHP dynamically generate namespace based on folder structurePHP根据文件夹结构动态生成命名空间
【发布时间】:2012-11-10 16:43:00
【问题描述】:

我有一个这样的文件夹结构:

index.php
app/
    controllers/
                folder1/
                        class.php

class.php 中没有命名空间定义。是否可以将 class.php 放在从相对于索引的文件夹结构生成的命名空间中?所以它会像这样加载:

new \app\controllers\folder1\classInFile();

还是没有办法动态创建命名空间?

【问题讨论】:

    标签: php oop dynamic namespaces


    【解决方案1】:

    命名空间需要在class.php内部定义,如果可以动态创建PHP源文件,则可以动态创建命名空间。

    【讨论】:

      【解决方案2】:

      包含命名空间的文件必须在任何其他代码之前在文件顶部声明命名空间。

      http://php.net/manual/en/language.namespaces.definition.php

      也就是说,您不能在命名空间声明之前执行任何代码,之后为时已晚。尽管有内省的运行时黑客:不,这是不可能的。即使是这样,它也将取决于运行时信息,例如执行/包含代码的文件夹。命名空间可以是var\www\myproject\foo\bar\baz 或只是foo\bar\baz。你将如何确定?越来越乱了。

      真的,只是显式,即使这意味着输入更多。命名空间是类的 name 的一部分。您不应该在运行时动态生成 names

      【讨论】:

        【解决方案3】:

        您不应该动态生成命名空间,命名空间不能在编译时设置和读取。

        在任何情况下,命名空间都是在执行任何代码之前提供/定义的。

        【讨论】:

          猜你喜欢
          • 2011-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          • 1970-01-01
          • 2020-02-22
          相关资源
          最近更新 更多