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)
事情。$finalResult
echo($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 号”……但事实并非如此。
这里的问题是,一旦为变量分配了值(在您的例子中是字符串),它的值就不会改变,直到再次修改为止。
您可以使用匿名函数来完成类似的事情:
$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)