PHP类变量加载不正确


PHP class variable loads unproperly

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

我真的很想知道它是做什么的,非常感谢您的回复。

我猜你没有所有的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. 我添加了一个参数$localization与您的getInstance方法。
  2. 我在你的构造函数中将$this->$localization = $localization;改为$this->localization = $localization;

请观察$this->$localization = $localization;$this->localization = $localization;之间的差异。$this->$localization是一个变量变量。意思是一旦你传递让说english作为一个参数给你的构造函数,它使一个变量称为$english并在其中赋值。这就是为什么你会看到english = english的东西