我有一个这样的文件夹结构:
index.php
app/
controllers/
folder1/
class.php
类.php中没有命名空间定义。是否可以将class.php放在相对于索引的文件夹结构生成的命名空间中?所以它会像这样加载:
new appcontrollersfolder1classInFile();
还是没有办法动态创建命名空间?
包含命名空间的文件必须在任何其他代码之前在文件顶部声明命名空间。
http://php.net/manual/en/language.namespaces.definition.php
也就是说,你不能在命名空间声明之前执行任何代码,之后为时已晚。尽管有内省的运行时黑客:不,这是不可能的。即使是这样,它也取决于运行时信息,例如从哪个文件夹执行/包含代码。命名空间可以是varwwwmyprojectfoobarbaz
的,也可以只是foobarbaz
。你打算如何确定?这越来越混乱了。
真的,只要让它明确一点,即使这意味着多输入一点。命名空间是类名称的一部分。不应在运行时动态生成名称。
不应动态生成命名空间,无法在编译时设置和读取命名空间。
在任何情况下,命名空间都是在执行任何代码之前提供/定义的。
类内部定义.php如果可以动态创建 PHP 源文件,则可以动态创建命名空间。