我有一个翻译语言数组库的类。所以问题在于该语言不会基于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