PHP类变量加载不正确

时间:2016-08-29 17:54:48

标签: php internationalization

i18n Object
(
    [localization] => 
    [timezone] => 
    [lang] => 
    [english] => english
    [strings] => Array
        (
            [main/welcome] => welcome
        )

)

我从

得到这个
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支持内化吗?它有内部系统吗?我想知道,我不想再发明整轮,只是它的一部分。非常感谢你......

我真的很想知道它的作用,非常感谢你的回应。

1 个答案:

答案 0 :(得分: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;
  3. 请注意$this->$localization = $localization;$this->localization = $localization;之间存在差异。 $ this-> $ localization是variable variable。一旦你传递的意思让我们说english作为你的构造函数的参数,它会创建一个名为$ english的变量并在其中赋值。这就是你看到english = english事物的原因