2013-02-24 17 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

相關問題