2

有没有办法做到这一点:

$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将被附加到 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; 

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

4

2 回答 2

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);
于 2013-04-17T14:12:04.327 回答
-2

这比我以前简单一点。单引号告诉 PHP 不要将 $myVar 转换为值。

<?php
$myVar = 2;
$str = 'I\'m number: $myVar';
$myVar = 3;

echo eval("echo(\"$str\");");
?>
于 2013-04-17T14:20:45.220 回答