有没有办法做到这一点:
$myVar = 2;
$str = "I'm number:".$myVar;
$myVar = 3;
echo $str;
输出为:"I'm number: 3";
我想要一个字符串,其中一部分就像一个指针,其值将通过对引用变量的最后修改来设置。
例如即使我这样做:
$myStr = "hi";
$myStrReference = &$myStr;
$dynamicStr = "bye ".$myStrReference;
$myStr = "bye";
echo $dynamicStr;
这将输出“bye hi
”,但由于上次更改,我希望它为“bye bye
”。我认为问题是当连接指向字符串的指针时,指针的值是使用的值。因此,使用串联后设置的值输出字符串是不可能的。
有什么想法吗?
更新:$dynamicStr
将附加到$biggerString
,最后$finalResult
($biggerString+$dynamicStr
)将回显给echo eval($finalResult)
用户。因此,我唯一的选择就是做某种$finalResult
echo($dynamicStr)
内部$dynamicStr='$myStr'
和$myVar = 2;
$str = function() use (&$myVar) {
return "I'm number $myVar";
};
$finalStr = "hi ".$str();
$myVar = 3;
echo $finalStr;
(如Lawson所建议的那样),对吗?
更新
{{1}}
我想为此输出:“嗨,我是3号”而不是“嗨,我是2号”......但事实并非如此。
答案 0 :(得分:4)
这里的问题是,一旦为变量分配了一个值(在你的情况下是一个字符串),它的值在它被再次修改之前不会改变。
您可以使用匿名函数来完成类似的操作:
$myVar = 2;
$str = function() use (&$myVar) {
return "I'm number $myVar";
};
echo $str(); // I'm number 2
$myVar = 3;
echo $str(); // I'm number 3
当函数被分配给$str
时,它可以从内部访问变量$myVar
。在任何时间点调用它都将使用最新值$myVar
。
<强>更新强>
关于你的上一个问题,如果你想进一步扩展字符串,你可以创建另一个包装器:
$myVar = 2;
$str = function() use (&$myVar) {
return "I'm number $myVar";
};
$finalStr = function($str) {
return "hi " . $str();
}
$myVar = 3;
echo $finalStr($str);
答案 1 :(得分:-2)
这比我以前简单一点。单引号告诉PHP不要将$ myVar转换为值。
<?php
$myVar = 2;
$str = 'I\'m number: $myVar';
$myVar = 3;
echo eval("echo(\"$str\");");
?>