Разбор переменных внутри строки
Я храню некоторые строки в *.properties
файл. Пример строки:
sendFrom=Отправка электронных писем от {$ oEmails-> agentName}, {$oEmails->customerCount} людям.
Моя функция принимает значение от sendingFrom
и затем выводит эту строку на страницу, однако она не анализирует автоматически {$oEmails->agentName}
в. Есть ли способ, не разбирая вручную, что для меня, чтобы заставить PHP преобразовать переменную из строки, во что это должно быть?
4 ответа
Если вы можете изменить свой *.properties
Вот простое решение:
# in file.properties
sendingFrom = Sending emails from %s, to %s people.
А потом замена %s
с правильными значениями, используя sprintf:
// Get the sendingFrom value from file.properties to $sending_from, and:
$full_string = sprintf($sending_from, $oEmails->agentName, $oEmails->customerCount);
Это позволяет вам отделить логику вашего приложения (переменные и способ их получения) от вашей презентации (фактическая строковая схема, хранящаяся в file.properties
).
Просто альтернатива.
$oEmails = new Emails('Me',4);
$str = 'sendingFrom=Sending emails from {$oEmails->agentName}, to {$oEmails->customerCount} people.';
// --------------
$arr = preg_split('~(\{.+?\})~',$str,-1,PREG_SPLIT_DELIM_CAPTURE);
for ($i = 1; $i < count($arr); $i+=2) {
$arr[$i] = eval('return '.substr($arr[$i],1,-1).';');
}
$str = implode('',$arr);
echo $str;
// sendingFrom=Sending emails from Me, to 4 people.
Поскольку другие упоминали, что Eval не подходит, я предлагаю preg_replace
или preg_replace_callback
если вам нужно больше гибкости.
preg_replace_callback('/\$(.+)/', function($m) {
// initialise the data variable from your object
return $data[$m[1]];
}, $subject);
Проверьте эту ссылку также, она предлагает использование strstr
Как заменить переменную в строке значением в php?
Вы можете использовать Eval со всеми обычными защитными кавитами
Что-то вроде.
$string = getStringFromFile('sendingFrom');
$FilledIn = eval($string);