多个文件的PHP命名空间

时间:2014-09-04 14:05:08

标签: php namespaces include

我试图包含许多包含函数,类和调用的文件,但我想将所有内容放在PHP命名空间中。 我的问题是:所有文件都是另一个Web应用程序核心的一部分。所以我无法编辑文件。 有没有办法在全局范围内为文件列表声明命名空间? 这样的事情:

namespace mynamespace {
    include_once("file1.inc.php");
    include_once("file2.inc.php");
    include_once("file3.inc.php");
    ...
}

当然我尝试了这段代码并且它不起作用;注释命名空间mynamespace;。

的包含文件的第一行时,我的所有尝试都失败了

2 个答案:

答案 0 :(得分:2)

不,这是不可能的。每个文件都需要声明自己的命名空间;你不能使用外部代码强制某些东西在不同的命名空间中。 (像runkit这样的一些黑客可能会让你摆弄它,但我认为这超出了PHP作为一种语言的常规范围。)

答案 1 :(得分:0)

是的。有点麻烦(您需要列出所有类),并且仅当您具有以<?php开头且没有命名空间的行为良好的文件时才起作用。另外,由于评估的东西中没有适当的错误报告,因此只能将它与经过良好测试的代码一起使用。

<?php

namespace whatever;

use mynamespace\Class1FromFile1;
use mynamespace\Class2FromFile1;
use mynamespace\ClassFromFile2;
use mynamespace\ClassFromFile3;

function ns_inc ($lib, $ns) {
        eval("namespace $ns;" . substr(file_get_contents($lib), 5));
}

$ns= 'mynamespace';
ns_inc('file1.inc.php', $ns);
ns_inc('file2.inc.php', $ns);
ns_inc('file3.inc.php', $ns);