更新另一个变量中的变量

时间:2014-09-19 12:04:14

标签: php

我想知道是否可以更新另一个变量中的变量。

以下是一个例子:

$t = 15;
$dir ='foo and some more text'.$t.'and more foo';
$t = 10;
print_r($dir);

对我来说$dir输出$t为15而不是10。

任何人都可以帮我吗?

4 个答案:

答案 0 :(得分:5)

您误解了该代码实际在做什么。这一行:

$dir ='foo and some more text'.$t.'and more foo';

不会将参考存储到$t以供将来评估。它会将$t评估为当时所拥有的任何值,并使用结果来构建放置在$dir中的值。在引擎进入将$t分配给$dir的步骤之前,对{{1}}的任何引用都将丢失。

您可以将变量传递给函数,可以将变量状态封装在对象中,但是计算后的字符串不会引用变量。

答案 1 :(得分:0)

这是不可能的。但您可以使用preg_match和自定义打印功能进行类似的操作。

这是一个如何完成的例子(警告:实验性):

<?php

$blub = 15;
$test = 'foo and some more text %blub and more foo %%a';

function printv($text) {
    $parsedText = preg_replace_callback('~%([%A-Za-z0-9]+)~i', function($matches) {
        if ($matches[1][0] != '%') {
            return $GLOBALS[$matches[1]];
        }

        return $matches[1];
    }, $text);

    echo $parsedText;
}

$blub = 17;
printv($test);

?>

答案 2 :(得分:0)

在赋值时$ t的值是什么值为15.这将被存储和分配。所有语言都是一样的。

答案 3 :(得分:0)

或者如果您愿意,可以使用anonymous function轻松完成。

 $dir = function ($t) {return 'foo and some more text'.$t.'and more foo';}
 echo $dir(10);
 //foo and some more text10and more foo
 echo $dir(15);
 //foo and some more text15and more foo