Проблема в том, что вы загружаете файл lang изнутри функции, а это означает, что $lang
помещается не в глобальную область, а в локальную область функции.
Минимально необходимое изменение, чтобы оно заработало (но не очень хорошая идея)
Предполагая, что вы хотите, чтобы $lang
находился внутри глобальной области, вы можете сделать это явно:
public function lang($file, $language){
require 'languages/'.$language.'/'. $file . '.php';
$GLOBALS['lang'] = $lang; // "export" to global scope
}
Гораздо лучшая идея
Есть несколько вещей, которые можно улучшить:
- Вышеприведенная функция записывает содержимое глобальной переменной
$lang
"за спиной вызывающего" - это нехороший дизайн и усложняет поддержку кода
- Как есть, он загружает языковой файл с нуля каждый раз, когда вы его называете
Вы можете убить обеих птиц одним камнем, храня содержимое языкового файла в локальной переменной static
и возвращая его из функции: больше нет записи в глобальную область, и переменная сохраняет свое содержимое, поэтому вы не сможете не нужно каждый раз перезагружать языковой файл. Это будет выглядеть так:
public function lang($file, $language){
static $cache = array();
if (empty($cache[$language][$file])) {
// load language files on demand
require 'languages/'.$language.'/'. $file . '.php';
$cache[$language][$file] = $lang;
}
return $lang; // return requested data, which is now definitely cached
}
И чтобы использовать его, вы должны сделать:
$lang = $this->lang('global', 'en');
Выводить необработанные переменные в глобальную область видимости, как это не всегда лучшая идея, но в зависимости от обстоятельств (небольших проектов) это может быть хорошо.