我有一个像这样的双引号的字符串
$count = 5;
$str = "result: $count";
echo $str; //result: 5
变量解析工作得很好,我的问题是$ count var必须晚于$ str
定义$str = "result: $count";
$count = 5;
echo $str; //result:
因此,我将使用单引号并在此处提出一个问题,以便在需要时找到解析var的方法
$str = 'result: $count';
$count = 5;
//TODO: parse var process
echo $str; //result: 5
我不会使用正则表达式替换。
答案 0 :(得分:7)
对于这种类型的东西,我可能会使用字符串格式。在PHP中,那就是printf。
?php
$str="result: %d"
....dostuff.....define $count.....
printf($str,$count)
?
编辑: 虽然,最好的方法可能部分取决于为什么你必须在$ count之前定义$ string。
如果它是一个重复了很多的字符串,并且你想将它放在一个全局变量或其他东西中,printf将是我的选择,或者像其他答案所建议的那样将它放在一个函数中。
如果字符串仅使用一次或两次,您确定无法重构代码以在$ string之前定义$ count吗?
最后,有点乏味的理论: 当你写'$ string =“结果:$ count”'时, PHP立即获取$ count的值并将其放入字符串中。在那之后,为了$ string的目的,它不再担心$ count,即使$ count更改,$ string也不会,因为它包含值的文字副本。 据我所知,没有一种方法可以将字符串中的位置绑定到尚未定义的变量。 'printf'方法在字符串中留下占位符,当您决定占位符中的内容时,函数printf将替换为值。
所以,如果你只想写 $ string =“结果:$ count” $数= 5 $ echo string
(而不必调用其他功能)
得到 “结果:5”, 没有办法做到这一点。最接近的方法是使用占位符和printf,但这需要显式调用函数,而不是隐式替换。
答案 1 :(得分:0)
为什么不使用功能?
function result_str($count) { return "result: $count"; }
答案 2 :(得分:-2)
preg_replace是最简单的方法。像这样:
$str = preg_replace("/\\$([a-z0-9_]+)/ie", "$\\1", $str);
但如果你真的不想使用正则表达式,那么你必须手动解析字符串,提取变量名,然后替换它。