2013-02-24 19 views
0

我有一个翻译语言数组库的类。所以问题在于该语言不会基于cookie值进行更改。我如何正确地将值分配给PHP类中的私有静态变量?

这个函数应该设置语言值,但它不会。似乎无论我做什么,我总是将“ar”作为self :: $ currlang值。我如何纠正这个问题?

public function _set(){ 

    if($_COOKIE['defaultLang'] != '') { 
     self::$currlang = $_COOKIE['defaultLang']; 
    } else { 
     //this is the default language 
     self::$currlang = 'ar'; 
    } 

} 

这里是我的代码

感谢您的帮助:)

<?php 
include('../langs/english.php'); 
include('../langs/arabic.php'); 

class Translator{ 
    private static $strs = array(); 
    private static $currlang = ""; 


    public function _set(){ 

     if($_COOKIE['defaultLang'] != '') { 
      self::$currlang = $_COOKIE['defaultLang']; 
     } else { 
      //this is the default language 
      self::$currlang = 'ar'; 
     } 

    } 


    public static function loadTranslation($lang, $strs){ 
     if (empty(self::$strs[$lang])) 
      self::$strs[$lang] = array(); 

     self::$strs[$lang] = array_merge(self::$strs[$lang], $strs);   
    } 

    public static function setDefaultLang($lang){ 
     self::$currlang = $lang;   
    } 

    public static function getDefaultLang(){ 
     return self::$currlang;   
    } 

    public static function translate($key, $lang=""){ 
     if ($lang == ""){ 
      $lang = self::$currlang; 
     } 
     $str = self::$strs[$lang][$key]; 
     if (empty($str)){ 
      //$str = "$lang.$key"; 
      $str = 'Language "'. $lang . '", '. $key . ' is not defined.';   
     } 
     return $str;  
    }  

    public static function freeUnused(){ 
     foreach(self::$strs as $lang => $data){ 
      if ($lang != self::$currlang){ 
       $lstr = self::$strs[$lang]['langname']; 
       self::$strs[$lang] = array(); 
       self::$strs[$lang]['langname'] = $lstr;     
      }    
     }   
    } 

    public static function getLangList(){ 
     $list = array(); 
     foreach(self::$strs as $lang => $data){ 
      $h['name'] = $lang; 
      $h['desc'] = self::$strs[$lang]['langname']; 
      $h['current'] = $lang == self::$currlang; 
      $list[] = $h; 
     } 
     return $list;   
    } 

    public static function &getAllStrings($lang){ 
     return self::$strs[$lang]; 
    } 

} 

?> 
+0

为什么当前语言是您班级的STATIC属性?翻译班级如果全部使用同一种语言,又有什么意义呢? – Eevee 2013-02-24 02:09:15

+0

我在你的代码中看不到问题。一旦代码完成,请提供使用示例和静态变量的值。 – SteAp 2013-02-24 02:12:13

+0

@mike此外,为什么你要实现一个magic setter _set() - 不需要评估要设置的变量的名称。 http://www.php.net/manual/en/language.oop5.overloading.php#object.set – SteAp 2013-02-24 02:15:09

回答

1

的_set()魔术方法的工作原理与 - >运营商,这与实例化对象的作品。你不能在实例化对象中使用静态成员变量,它是一个或另一个。

+0

那么我应该改变什么设置?我怎样才能基于Cookie设置这些变量? – Jaylen 2013-02-24 03:33:24

+0

我会创建一个静态的set($ varname,'value')方法,它基本上和你现在使用的内部代码基本相同=)然后你可以用$ obj :: set('name','值) – jhansen 2013-02-24 03:37:47

+0

jhansen这将工作时,我改变语言,但我希望语言被自动检测,如果cookie设置。所以我设置了一个下拉菜单变更的cookie,并且当包含翻译器类时,它应该设置cookie值的语言基础 – Jaylen 2013-02-24 18:21:30

相关问题