2016-08-29 66 views
1
i18n Object 
(
    [localization] => 
    [timezone] => 
    [lang] => 
    [english] => english 
    [strings] => Array 
     (
      [main/welcome] => welcome 
     ) 

) 

我得到這個從PHP類可變負載unproperly

class i18n { 
    public $localization; 
    public $timezone; 
    public $lang; 
    private static $instance; //The single instance 
    public static function getInstance(){ 
     if (self::$instance == null){ 
      self::$instance = new self($localization); 
     } 
     return self::$instance ; 
    } 
    public function __construct($localization) { 
     $this->$localization = $localization; 
     // if($this->localization == 'english') { // ill be writing these sick things like idiot for each translation, FML 
      $this->strings = english::load(); 
     //} 
     // TODO $this->strings = $localization::load(); 
    } 
    public function getString($string_id) { 
     return $this->strings[$string_id]; 
    } 
} 
?> 

我不明白怎麼回事了,可有人請解釋我發生了什麼事? 我認爲它應該有所不同,就像在本地化的英語......我想知道它是如何發生的,事先有一些方法來解決它,因爲我掙扎了我自己的CMS或其他東西,我只是無聊,所以我的代碼,但我不管理如何得到這個問題做...

它必須是PHP內的東西...... PHP支持內部化?它有內部系統嗎?我想知道,我不想再發明整個輪子,只是其中的一部分。非常感謝...

我真的很想知道它的功能,非常感謝您的回覆。

+0

使用'var_dump'而不是'print_r'。然後你會知道一個值是否爲空或NULL。它們是有區別的。 –

回答

0

我想你沒有全部error_reporting。請確保這樣做,然後您應該從代碼中看到類似Notice: Undefined variable: $localization的內容。如果你用下面的代碼更新你的代碼,你應該在本地化中看到英語。

public static function getInstance($localization = 'english'){ 
    if (self::$instance == null){ 
     self::$instance = new self($localization); 
    } 
    return self::$instance ; 
} 

public function __construct($localization) { 
    $this->localization = $localization; 
    // if($this->localization == 'english') { // ill be writing these sick things like idiot for each translation, FML 
     $this->strings = english::load(); 
    //} 
    // TODO $this->strings = $localization::load(); 
} 
public function getString($string_id) { 
    return $this->strings[$string_id]; 
} 

然後實例類的,

$object = i18n::getInstance('french'); // for languages other than english 

所以,基本上我改變了兩件事情

  1. 我加入你的getInstance方法參數$localization
  2. 我在你的構造函數中將線條$this->$localization = $localization;更改爲$this->localization = $localization;

請注意,$this->$localization = $localization;$this->localization = $localization;之間有區別。 $ this - > $ localization是一個variable variable。含義一旦你傳遞讓我們說english作爲你的構造函數的參數,它會產生一個名爲$ english的變量併爲其賦值。這就是爲什麼你看到english = english的東西

+0

我正在這樣做... > $ i18n = i18n :: getInstance('english'); –

+0

我不知道爲什麼我得到英文='英文' –

+0

你確定嗎?你沒有在你提供的代碼中使用你的'getInstance'參數。在這種情況下,也許你應該更新你的代碼,以便人們對你的問題有更好的理解? –