【问题标题】:Define constant in a different namespace php在不同的命名空间php中定义常量
【发布时间】:2011-12-18 17:21:30
【问题描述】:

这就是我过去所做的事情

//file: bar.php
defined('MYC') or define('MYC', 'val1');
//file: bootstrap.php
define('MYC', 'val2');

我会首先包含 bootstrap.php,它会设置 MYC = 'val2'
现在 bar.php 在 \Foo\Bar 命名空间中,也就是说

//file: bar.php
namespace Foo\Bar;
defined('MYC') or define('MYC', 'val1');
//file: bootstrap.php
//following doesn't work
//const \Foo\Bar\MYC = 'val2';
//?? what do I do here ??

【问题讨论】:

  • 无论命名空间如何,您的代码都应该仍然可以工作,因为 define() 函数定义了全局常量,它们在任何命名空间中都是可见的。
  • 谢谢,我通过实验得到了这一点,而且我还认为我不能在namespace Foo\Bar; 中做有条件的const MYC = 'val1'; 所以我想我将不得不忍受shitty_long_namespaced_global_constant_names :(
  • define() 不支持命名空间。您必须执行 define (__NAMESPACE__ . '\CONST_IN_NAME_SPACE') 才能让它在当前命名空间中创建一个常量。或者,如果您不必在定义常量之前计算其值,则可以使用const

标签: php namespaces constants


【解决方案1】:

只需 define 在名称中包含命名空间的键。

【讨论】:

  • define() 定义的这些常量是否总是出现在全局命名空间中?看起来是这样,让我深入研究并报告
  • 看起来,任何命名空间中的 define('MYC1', 'val1') 都是 MYC1 常量,而 namespace Foo\Bar 中的 const MYC2 实际上是 \Foo\Bar\MYC2 ,我无法做到 const \Foo\Bar\MYC2 在 @987654328 之外@,所以所有关于他们自己命名空间中的常量的爵士乐对我来说都不起作用:(
猜你喜欢
  • 2013-09-17
  • 2013-06-12
  • 2015-06-02
  • 2013-03-20
  • 2013-06-03
  • 2012-11-15
  • 1970-01-01
  • 2014-01-24
  • 2014-09-02
相关资源
最近更新 更多