解析字符串中的变量

时间:2012-05-23 16:51:10

标签: php string variables variable-variables

我在*.properties文件中存储了一些字符串。字符串的示例是:

  

sendingFrom = 从{$ oEmails-> agentName} 向{$ oEmails-> customerCount}人发送电子邮件。

我的函数从sendingFrom获取值,然后在页面上输出该字符串,但它不会自动解析其中的{$oEmails->agentName}。有没有办法,没有手动解析,让我让PHP将变量从字符串转换为它应该是什么?

4 个答案:

答案 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_replacepreg_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);