双引号和单引号的字符串

时间:2009-03-29 06:06:25

标签: php

我有一个像这样的双引号的字符串

$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

我不会使用正则表达式替换。

3 个答案:

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

但如果你真的不想使用正则表达式,那么你必须手动解析字符串,提取变量名,然后替换它。