2011-10-31 62 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 –