我有一個翻譯語言數組庫的類。所以問題在於該語言不會基於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];
}
}
?>
爲什麼當前語言是您班級的STATIC屬性?翻譯班級如果全部使用同一種語言,又有什麼意義呢? – Eevee 2013-02-24 02:09:15
我在你的代碼中看不到問題。一旦代碼完成,請提供使用示例和靜態變量的值。 – SteAp 2013-02-24 02:12:13
@mike此外,爲什麼你要實現一個magic setter _set() - 不需要評估要設置的變量的名稱。 http://www.php.net/manual/en/language.oop5.overloading.php#object.set – SteAp 2013-02-24 02:15:09