2016-08-29 96 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'参数。在这种情况下,也许你应该更新你的代码,以便人们对你的问题有更好的理解? –