30.05.2018 10:10:41 am
Здравствуйте. Тут: Переход на PHP 7 есть пример, как исправить ошибку: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead, надо функцию preg_replace заменить на preg_replace_callback. У меня такая строчка:
Этот код заменяет ключи на фразы. Исправляю его так:
Но вместо того, чтобы выводились фразы, выводятся ключи. Что я тут сделал не правильно?
Сильно не пинайте, я только начинаю изучать php. Спасибо.
$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. Спасибо.
- Жалоба
30.05.2018 10:35:28 am
Видимо переменная
То есть я после
Проверьте, работает?
$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)
.Проверьте, работает?
30.05.2018 12:45:47 pm
О! Работает! Спасибо! А еще можно при помощи global определять переменную:
Так тоже работает.
$phrase = preg_replace_callback('#^([a-z_]+)$#', function($match) {
global $lang;
return !empty($lang[$match[1]]) ? $lang[$match[1]] : $match[1];
},
$phrase
);
Так тоже работает.
30.05.2018 06:29:27 pm
Семёнов Александр сказал:
можно при помощи global определять переменнуюРаботать будет, но ни в коем случае, не используйте оператор
global
в своём коде. Лучше так: use($lang)
.