2011-10-31 61 views
0

定义常量下面是我在过去在不同的命名空间PHP

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

做我将包括bootstrap.php中首先这将设置MYC = 'val2'
现在bar.php是在\富\酒吧的命名空间,即说

//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 ?? 
+0

因为define()函数定义了全局常量,所以你的代码仍然可以工作,而不管命名空间是什么,因为define()函数定义了全局常量,它们在任何命名空间中都是可见的。 –

+0

谢谢,我通过实验得知了这一点,并且我也认为我不能在'namespace Foo \ Bar'中做'const MYC ='val1';'所以我想我必须忍受shitty_long_namespaced_global_constant_names :( – Sudhi

+0

define ()不是名称空间感知的,你必须执行'define(__NAMESPACE__。'\ CONST_IN_NAME_SPACE')'让它在当前命名空间中创建一个常量,或者,如果你不使用'const'必须在定义它之前计算常量的值 – GordonM

回答

1

只是define的关键,必须在名称的命名空间。

+0

做这些由define()定义的常量是否总是出现在全局命名空间中?它看起来像是这样,让我深入并报告 – Sudhi

+0

是的,它只是一个键/值对 –

+0

阅读:http://www.php.net/manual/en/language.constants.php –