2014-07-15 41 views
0

我不知道如何描述我的問題,但這裏是我想要做的: 我想逃避語言變量並將它們轉換爲靜態變量。這樣php將字符串轉換爲靜態變量

public static $languages = array('nl', 'en'); 
public static $nl; 
public static $en; 

public function __construct(){ 
    foreach(self::$languages as $lang){ 
     self::{$lang} = $content[$lang]; 
    } 
} 

東西,我知道這是可能有這樣的非靜態變量:

$this->{$lang} = $content[$lang]; 

而是試圖將其轉換爲一個靜態變量時,我經常會出錯。 有沒有辦法做到這一點?或者是不可能在PHP?

+0

'self :: $ {$ lang} = $ content [$ lang]'應該適用於靜態。 – Duroth

+0

'__construct()'不會被調用靜態變量或方法。你可能正在尋找單身模式。這只是一個配置存儲機制? –

回答

1

類似的反應你有幾個問題:

  1. 類VAR必須是一個常量表達式。數組定義不是。
  2. 靜態變量用$來訪問。
  3. $content未定義。

剛例如,這個工程:

public static $nl; 
public static $en; 

public function __construct(){ 
    $languages = array('nl', 'en'); 
    foreach($languages as $lang){ 
     //self::${$lang} = $content[$lang]; 
     self::${$lang} = time(); 
     echo self::${$lang}; 
    } 
} 
+0

這個作品,謝謝!正是我在找什麼!附: $內容已被定義,但我沒有在問題中包含它;-) –

-1

不,你不能做到這一點,即使使用self::${$lang} = ...你會得到PHP致命錯誤:

Fatal error: Access to undeclared static property: MyClass::$lang in test.php on line 9

但是,你確定你想使用靜態屬性?我假設你在實例化對象時將$content數組傳遞給構造函數。如果$ content內的值特定於特定對象,則應將這些值存儲到對象屬性中而不是靜態屬性中。