Trivial question: Array || constants?
Подскажите как лучше хранить и обращаться к "языковым переменным"?
т.е. сейчас есть массив из порядка 300 элеменов, к которым я обращаюсь через класс (для удобства), вот:
Код:
// ßçûêîâîé êëàññ
class lang{
public $words=array();
public function __construct($lang='ru',$charset='utf-8'){
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/kernel/lang/'.$lang.'-'.$charset.'.php')){
include($_SERVER['DOCUMENT_ROOT'].'/kernel/lang/'.$lang.'-'.$charset.'.php');
if(isset($words)&&is_array($words)){
$this->words=$words;
unset($words);
}
}
else
MsgDie('Not found lang file');
}
public static function AddWordForArray($array=''){
global $_lang;
if(is_array($array)){
$_lang->words+=$array;
unset($array);
}
}
public static function word($word=''){
global $_lang;
return (isset($_lang->words[$word]))?$_lang->words[$word]:$word;
}
}
class lang{
public $words=array();
public function __construct($lang='ru',$charset='utf-8'){
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/kernel/lang/'.$lang.'-'.$charset.'.php')){
include($_SERVER['DOCUMENT_ROOT'].'/kernel/lang/'.$lang.'-'.$charset.'.php');
if(isset($words)&&is_array($words)){
$this->words=$words;
unset($words);
}
}
else
MsgDie('Not found lang file');
}
public static function AddWordForArray($array=''){
global $_lang;
if(is_array($array)){
$_lang->words+=$array;
unset($array);
}
}
public static function word($word=''){
global $_lang;
return (isset($_lang->words[$word]))?$_lang->words[$word]:$word;
}
}
Я вот думаю что это не очень правельно. Что если обрашяться через функцию к конмтантам? Ну собственно хотелось бы услышать не только своё мнение)
Данное "творчетсво" используется только для админки сайта.
Тем более для админки, которой пользуется только доверенный пользователь?
Сий класс не может жрать много ресурсов.
Работает корректно?
Требуемы функционал обеспечивает?
Гибкий?
Пусть так и будет...
Код:
$lang = array();
$lang["admin"]["title"] = "Админка";
// ...
$lang["admin"]["title"] = "Админка";
// ...
И т.д. в таком духе. Подключается обычным include - и никаких проблем.
Можно, конечно, для корректности, обернуть все это дело также в функцию для отхода от привязки к имени $lang, но у себя в проектах смысла в этом особого не видел.
Меня смущает только размер массива.
2UAS, в классе удобно чтоб не объявлять глабально, на наличие проверять, и подгружать дополнительные.
Ничто не мешает все это завернуть в синглтон-класс, в котором и будет храниться сам $lang. Кода станет меньше + он намного приятнее станет + будут все удобства класса + избавитесь от не совсем нужного здесь __construct (если юзать singleton).
Чем проще, тем лучше. Если просто массив с фразами не подходит, то тогда [phpdoc]gettext[/phpdoc]