1

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

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

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

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

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

4

3 回答 3

2

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

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

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

真的,只要让它明确,即使这意味着输入更多。命名空间是类名称的一部分。您不应在运行时动态生成名称。

于 2012-11-22T10:03:43.477 回答
0

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

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

于 2012-11-22T10:03:13.637 回答
0

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

于 2012-11-22T10:04:09.783 回答