有什么办法可以做到这一点:
$myVar = 2;
$str = "I'm number:".$myVar;
$myVar = 3;
echo $str;
输出为:“我的号码: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'
(按照 Lawson 的建议),对吧?
更新:
$myVar = 2;
$str = function() use (&$myVar) {
return "I'm number $myVar";
};
$finalStr = "hi ".$str();
$myVar = 3;
echo $finalStr;
我希望输出:“嗨,我是 3 号”而不是“嗨,我是 2 号”……但事实并非如此。
最佳答案
这里的问题是,一旦为变量分配了值(在您的情况下为字符串),其值就不会更改,直到再次修改为止。
您可以使用匿名函数来完成类似的事情:
$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);
关于PHP动态字符串更新引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16062349/