我在*.properties
文件中存储了一些字符串。字符串的示例是:
sendingFrom = 从{$ oEmails-> agentName} 向{$ oEmails-> customerCount}人发送电子邮件。
我的函数从sendingFrom
获取值,然后在页面上输出该字符串,但它不会自动解析其中的{$oEmails->agentName}
。有没有办法,没有手动解析,让我让PHP将变量从字符串转换为它应该是什么?
答案 0 :(得分:4)
如果您可以修改*.properties
,这是一个简单的解决方案:
# in file.properties
sendingFrom = Sending emails from %s, to %s people.
然后使用sprintf
将%s
替换为正确的值
// Get the sendingFrom value from file.properties to $sending_from, and:
$full_string = sprintf($sending_from, $oEmails->agentName, $oEmails->customerCount);
它允许您从演示文稿中分离应用程序的逻辑(变量以及如何获取它们)(实际的字符串方案,存储在file.properties
中)。
答案 1 :(得分:2)
只是另一种选择。
$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.
答案 2 :(得分:1)
正如其他人提到的那样,eval不合适,如果您需要更多的灵活性,我建议使用preg_replace
或preg_replace_callback
。
preg_replace_callback('/\$(.+)/', function($m) {
// initialise the data variable from your object
return $data[$m[1]];
}, $subject);
同时检查此链接,建议使用strstr
How replace variable in string with value in php?
答案 3 :(得分:0)
您可以将Eval与所有常用的安全鱼缸一起使用
类似的东西。
$string = getStringFromFile('sendingFrom');
$FilledIn = eval($string);