0

我正在尝试用它的值替换变量名,这里是示例:

<?php
$string = "value";
$$string = "value2";
?>

所以实际上 $$string 必须是 $value 对吗?我想要做的是将$$string 设为$value,我尝试用正则表达式做一些事情,但它不起作用这是我的代码:

<?php

function var_replaced($code)
{
}
$code = htmlspecialchars(file_get_contents("file.php"));
$code = preg_replace_callback("/$$ (.+?) /i",'var_replaced', $code);
echo $code;
?>  

关键是在我使用此函数 var_replaced 后,我的代码将变为:

<?php
$value = "value2";
?> 

知道如何解决这个问题吗?

4

1 回答 1

1

你需要考虑两件事。回调将使用另一个局部变量上下文执行。它不会有外面$string的东西。因此,这是您需要preg_replacewith /eval 开关的情况之一。

您的正则表达式也很遥远。你那里有一些空间,并且.+?不知道在哪里停下来。它只会看一个字符。

您必须在此处约束占位符。最好寻找字母数字字符。

第三,你必须逃脱$,因为那代表着线或主题结束。

因此,您所描述的方法是:

$code = preg_replace("/[$][$](\w+)/e", '$$$1', $code);

但是,_callback如果可以的话,通过将替换变量存储在数组中来使用。然后在回调中进行数组查找:

function var_replaced($match)
{
    list(, $varname) = $match;
    $reference = $GLOBALS["yourvars"][$varname];
    $value = $GLOBALS["yourvars"][$reference];
    return $value;
}

这会手动查找要解释为另一个变量名的第一个键,然后获取重写后的变量名的值。

如果那是你所要求的,我完全不知道。

于 2012-10-21T22:22:26.117 回答