【发布时间】: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