php - Eval 替换和解析 PHP 字符串中的变量
问题描述
$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
, inside$html
在 期间被评估eval()
,并且此时$DATA
被定义(因为,在之前定义eval()
)。
在第二种情况下,$DATA
在这条线上进行插值,此时$html = '<html><body>$DATA</body></html>';
未定义$DATA
。
$DATA = "<h1>Hi</h1>";
$html = "<html><body>$DATA</body></html>";
上面的代码有效,因为$DATA
是在评估之前定义的。
正如@NigelRen 指出的那样,在第二种情况下,字符串使用单引号,并且变量不会插入“单引号”字符串中。
推荐阅读
- javascript - 节点面向对象。链接类
- mysql - 生成表查询中的行数| 微软访问
- anaconda - Anaconda 在更新时总是想将我的 GPU Pytorch 版本替换为 CPU Pytorch 版本
- python - 我正在尝试根据程序的路径动态调用文件夹
- webpack - 如何有效地将 google-closure javascript 转换为现代 ES6?
- ios - Xcode App Store 提交错误:缺少应用程序标识符授权
- c# - 取消并等待异步任务方法
- python - 图:python语言中的重路由问题测试
- google-cloud-platform - Google Cloud Vision 是否保存客户端的输入数据?
- tensorflow - 如何创建类似于 Imagenet 或 Noisy-student 的预训练权重模型?