我有一个像这样的文件夹结构:
index.php
app/
controllers/
folder1/
class.php
class.php中没有名称空间定义。是否可以将class.php放在从文件夹结构相对于索引生成的命名空间中?所以它会像下载一样加载:
new \app\controllers\folder1\classInFile();
或者没有办法动态创建名称空间?
答案 0 :(得分:2)
包含命名空间的文件必须在任何其他代码之前在文件顶部声明命名空间。
即,你不能在命名空间声明之前执行任何代码,之后就太晚了。尽管有内省的运行时黑客攻击:不,这是不可能的。即使它是,它也将取决于运行时信息,例如代码执行/包含的文件夹。命名空间可以是var\www\myproject\foo\bar\baz
,也可以是foo\bar\baz
。你打算如何确定?那太乱了。
真的,只需将其显式,即使这意味着输入更多内容。命名空间是类的名称的一部分。您不应该在运行时动态生成名称。
答案 1 :(得分:0)
您不应该动态生成名称空间,不能在编译时设置和读取名称空间。
在任何情况下,在执行任何代码之前提供/定义命名空间。
答案 2 :(得分:0)
如果可以动态创建PHP源文件,则需要在class.php中定义命名空间,可以动态创建命名空间。