PHP动态字符串更新参考

out*_*d3r 2 php string pointers reference

有什么办法可以做到这一点:

$myVar = 2;
$str = "I'm number:".$myVar;
$myVar = 3;

echo $str;
Run Code Online (Sandbox Code Playgroud)

输出将是:"I'm number: 3";

我想要一个字符串,其中它的一部分就像一个指针,其值将由对引用变量的最后一次修改来设置。

例如,即使我这样做:

 $myStr = "hi";
 $myStrReference = &$myStr;
 $dynamicStr = "bye ".$myStrReference;
 $myStr = "bye";
 echo $dynamicStr;
Run Code Online (Sandbox Code Playgroud)

这将输出“ ”,但由于最后的更改,bye hi我希望它是“ ”。bye bye我认为问题在于,当将指针连接到字符串时,指针的值就是所使用的值。因此,不可能使用连接后设置的值来输出字符串。

有任何想法吗?

更新$dynamicStr将会被附加到 a$biggerString后面,最后$finalResult( $biggerString+$dynamicStr) 将回显给用户。因此,我唯一的选择就是做一些有内部和外部的echo eval($finalResult)事情。$finalResultecho($dynamicStr)$dynamicStr='$myStr'(如劳森建议的)

更新:

$myVar = 2;
$str = function() use (&$myVar) {
    return "I'm number $myVar";
};

$finalStr = "hi ".$str();
$myVar = 3;
echo $finalStr; 
Run Code Online (Sandbox Code Playgroud)

我希望输出:“嗨,我是 3 号”而不是“嗨,我是 2 号”……但事实并非如此。

Ja͢*_*͢ck 5

这里的问题是,一旦为变量分配了值(在您的例子中是字符串),它的值就不会改变,直到再次修改为止。

您可以使用匿名函数来完成类似的事情:

$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
Run Code Online (Sandbox Code Playgroud)

当函数被分配时,$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);
Run Code Online (Sandbox Code Playgroud)