Разбор переменных внутри строки

Я храню некоторые строки в *.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);
Другие вопросы по тегам