【问题标题】:PHP Namespace will not change after include or requirePHP 命名空间在 include 或 require 后不会改变
【发布时间】:2014-05-31 11:52:48
【问题描述】:

其实我的问题很简单。在 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{}

【问题讨论】:

标签: php namespaces


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。但是为什么 require 不会影响下面的命名空间呢?要求将页面加载到当前页面中,因此所有文件都将是一个文件。如果我手动执行此操作,它也会起作用。
  • PHP 解释器将把许多文件视为一个文件,但会在逻辑上将它们分开(足够恰当:通过命名空间)。 include 语句只是告诉解释器注意属于其他文件的函数等,但是虽然这些方法可能属于不同的命名空间,但 __NAMESPACE__ 只关心它所在文件的命名空间参考。
猜你喜欢
  • 2010-11-27
  • 2012-01-18
  • 2016-07-03
  • 2011-10-30
  • 2011-03-03
  • 1970-01-01
  • 2011-02-21
  • 2021-04-04
  • 2011-08-19
相关资源
最近更新 更多