在include或require之后,PHP命名空间不会更改

时间:2014-04-16 14:25:23

标签: php namespaces

实际上我的问题非常简单。在PHP中,我可以在将要加载require或include的文件中定义名称空间。 例如:

index.php的内容

namespace test;
require('example.php');
die(__NAMESPACE__);

example.php的内容

namespace example;
echo "hello world";

如果执行此代码,输出将为" test",因为如果包含具有其他命名空间的文件,则命名空间不会更改。

但你能告诉我为什么吗?我怎么能想象解析器呢? 它可能看起来像:

namespace test{}
namespace example{}
// and here it goes on with test, but why I didn´t said namespace test
namespace test{}

1 个答案:

答案 0 :(得分:0)

在PHP文件中,namespace声明后的所有代码都属于该命名空间。这包括require语句。

每个PHP文件都有自己的__NAMESPACE__值,该值在声明namespace时填充。要访问另一个文件的命名空间,您可以在example.php中创建一个返回__NAMESPACE__的方法。请参阅this question

或者,您可以使用get_current_namespaces(),但这不会告诉您哪个命名空间属于哪个文件。