我想知道是否可以更新另一个变量中的变量。
以下是一个例子:
$t = 15;
$dir ='foo and some more text'.$t.'and more foo';
$t = 10;
print_r($dir);
对我来说$dir
输出$t
为15而不是10。
任何人都可以帮我吗?
答案 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