Функция "preg_replace_callback" не работает (PHP)

Здравствуйте. Тут: Переход на PHP 7 есть пример, как исправить ошибку: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead, надо функцию preg_replace заменить на preg_replace_callback. У меня такая строчка:
	$phrase = preg_replace('#^([a-z_]+)$#e', "(!empty(\$lang['\\1'])) ? \$lang['\\1'] : '\\1'", $phrase);

Этот код заменяет ключи на фразы. Исправляю его так:
	$phrase = preg_replace_callback('#^([a-z_]+)$#', function($match) {
			return !empty($lang[$match[1]]) ? $lang[$match[1]] : $match[1];
		},
		$phrase
	);

Но вместо того, чтобы выводились фразы, выводятся ключи. Что я тут сделал не правильно?
Сильно не пинайте, я только начинаю изучать php. Спасибо.
Видимо переменная $lang не определена внутри функции, необходимо передавать саму переменную. Сделать это можно при помощи use, вот так:
	$phrase = preg_replace_callback('#^([a-z_]+)$#', function($match) use($lang) {
			return !empty($lang[$match[1]]) ? $lang[$match[1]] : $match[1];
		},
		$phrase
	);

То есть я после function($match) добавил use($lang).

Проверьте, работает?
О! Работает! Спасибо! А еще можно при помощи global определять переменную:
	$phrase = preg_replace_callback('#^([a-z_]+)$#', function($match) {
			global $lang;
			return !empty($lang[$match[1]]) ? $lang[$match[1]] : $match[1];
		},
		$phrase
	);

Так тоже работает.
Отредактировано 1:46 pm, Май 30, 2018 (Семёнов Александр).
1:45 pm, Май 30, 2018 (id: #2365)
можно при помощи global определять переменную

Работать буде, но ни в коем случае, не используйте оператор global в своём коде. Лучше так: use($lang).