Eval 替换和解析 PHP 字符串中的变量
Eval in replacing and resolving variables inside a PHP string
$html = '<html><body>$DATA</body></html>';
$DATA = "<h1>Hi</h1>";
eval("$html = \"$html\";");
echo $html;
以上代码将正确解析$DATA变量。而
$html = '<html><body>$DATA</body></html>';
$DATA = "<h1>Hi</h1>";
$html = "$html";
echo $html;
这段代码不会。为什么?这两者有什么区别?
eval("$html = \"$html\";");
不等于 $html = "$html";
吗?
为什么第一个有效而另一个无效?
如我上面的例子; $DATA
是并且必须在 $html
之后定义。就是这样:)。在其他情况下,我什至不会有问题和麻烦。
但这就是...为什么第一个有效而第二个无效。以及如何使第二个起作用?但主要是为什么它实际上不起作用。
第一种情况$DATA
里面的$html
是在eval()
期间求值的,此时$DATA
被定义了(因为,定义在[=13=之前]).
在第二种情况下,$DATA
被插值到这条线$html = '<html><body>$DATA</body></html>';
,此时$DATA
是未定义的。
$DATA = "<h1>Hi</h1>";
$html = "<html><body>$DATA</body></html>";
上面的代码有效,因为 $DATA
是在求值之前定义的。
正如@NigelRen 指出的,在第二种情况下,使用单引号的字符串和变量不会在 "single-quoted" 个字符串中插入。
$html = '<html><body>$DATA</body></html>';
$DATA = "<h1>Hi</h1>";
eval("$html = \"$html\";");
echo $html;
以上代码将正确解析$DATA变量。而
$html = '<html><body>$DATA</body></html>';
$DATA = "<h1>Hi</h1>";
$html = "$html";
echo $html;
这段代码不会。为什么?这两者有什么区别?
eval("$html = \"$html\";");
不等于 $html = "$html";
吗?
为什么第一个有效而另一个无效?
如我上面的例子; $DATA
是并且必须在 $html
之后定义。就是这样:)。在其他情况下,我什至不会有问题和麻烦。
但这就是...为什么第一个有效而第二个无效。以及如何使第二个起作用?但主要是为什么它实际上不起作用。
第一种情况$DATA
里面的$html
是在eval()
期间求值的,此时$DATA
被定义了(因为,定义在[=13=之前]).
在第二种情况下,$DATA
被插值到这条线$html = '<html><body>$DATA</body></html>';
,此时$DATA
是未定义的。
$DATA = "<h1>Hi</h1>";
$html = "<html><body>$DATA</body></html>";
上面的代码有效,因为 $DATA
是在求值之前定义的。
正如@NigelRen 指出的,在第二种情况下,使用单引号的字符串和变量不会在 "single-quoted" 个字符串中插入。