Eval в замене и разрешении переменных внутри строки PHP - PullRequest
0 голосов
/ 08 мая 2018
$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. Это так :). В противном случае у меня даже не было бы вопроса и беспокойства.

Но это ... почему первый работает, а второй нет. А как заставить работать второй? Но прежде всего, почему это на самом деле не работает.

1 Ответ

0 голосов
/ 08 мая 2018

В первом случае $DATA внутри $html оценивается в течение eval(), и в этот момент определяется $DATA (потому что определено до eval()).

Во втором случае $DATA интерполируется в этой строке $html = '<html><body>$DATA</body></html>'; и в этот момент $DATA не определено.

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

Приведенный выше код работает, потому что $DATA определен до оценки.

Как указал @NigelRen, во втором случае строка использует одинарные кавычки, а переменная не будет интерполироваться внутри строк с одинарными кавычками.

...