2011-10-05 45 views
2

我無法從使用字符串變量和PHP 5.3定義的類中獲取常量。命名空間。示例:使用名稱空間無法從動態類中獲取常量

use \Some\Foo\Bar; 

$class = 'Bar'; 
echo $class::LOCATION; 

其中LOCATION是一個正確定義的常量。我得到的錯誤說Bar Bar是未定義的。

如果我不是做

$class = "\Some\Foo\Bar"; 

一切工作正常。

有沒有辦法讓第一個例子工作?

回答

3

使用$class::CONST獲取類常量,需要$class包含獨立於當前名稱空間的完全限定類名。

use語句不幫助這裏,即使你是一個在namespace \Some\Foo,以下是行不通的:

namespace \Some\Foo; 

$class = 'Bar'; 
echo $class::LOCATION; 

正如你已經寫在你的問題,你已經找到了「解決方案」通過提供完全合格的類別名稱:

use \Some\Foo\Bar; 

$class = "\Some\Foo\Bar"; 
echo $class::LOCATION; 

但是,您不喜歡這一點。我不知道你的具體問題,但通常它看起來很好。如果您想將當前命名空間內解決的Bar完全限定類名,你可以實例化一個對象並訪問常數:

use \Some\Foo\Bar; 

$class = new Bar; 
echo $class::LOCATION; 

在這個階段,你甚至都不需要關心在命名空間中是。

如果您因爲某些原因需要在全局命名空間中有一個名爲Bar的類,則可以使用class_alias來使其起作用。在使用它的use \Some\Foo\Bar的更換,讓您所需的行爲:

class_alias('\Some\Foo\Bar', 'Bar'); 

$class = 'Bar'; 
echo $class::LOCATION; 

但無論如何,我可能不會得到你的問題,因爲你已經有解決方案看起來好像沒什麼問題。也許你可以寫出你的具體問題是什麼。

+0

最後一個例子,謝謝。 – clang1234

+1

接下來,它適用於以下代碼中的* all *,在正在進行的'class_alias'調用的全局名稱空間中總是會有一個名爲'Bar'的類。 – hakre

相關問題