PHP动态字符串更新参考

时间:2013-04-17 14:09:58

标签: php string pointers reference

有没有办法做到这一点:

$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号”......但事实并非如此。

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\");");
?>