簡體   English   中英

評估替換和解析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內的$DATAeval()期間eval() ,並且此時定義了$DATA (因為在eval()之前定義)。

在第二種情況下,將$DATA插入到這行$html = '<html><body>$DATA</body></html>'; 而此時$DATA是未定義的。

$DATA = "<h1>Hi</h1>";
$html = "<html><body>$DATA</body></html>";

上面的代碼有效,因為$DATA是在評估之前定義的。

正如@NigelRen指出的,在第二種情況下,字符串使用單引號,並且變量不會插在“單引號”字符串內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM