Я не понимаю, почему PHP не производит замены в строках, содержащих знаки доллара. Посмотрите на следующий пример:
<?php error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE); $var = 1024; $str = '$var'; echo $str, '<br>', "$str";
Вывод – $ var $ var . Почему это так? Все ясно с первым параметром echo
, но я ожидал, что последний параметр даст другой результат (1024), поскольку он содержит знак доллара, заключенный в двойные кавычки, поэтому его следует интерпретировать как переменную и заменить на 1024. Где я иду неправильно?
$str
содержит строку с содержимым "$var"
(без замены переменных, только эти самые символы). Он был создан с использованием одинарных кавычек, поэтому нет замены переменных.
При повторении echo "$str"
с помощью echo "$str"
переменная $str
заменяется ее содержимым, а именно строкой "$var"
, что приводит к выходу.
Замена строк в строках с двойными кавычками не работает рекурсивно! Таким образом, чтобы во второй внешности заменить $str
на 1024
, вам необходимо создать $str
используя двойные кавычки.
"
позволяет размещать переменные внутри строки.
'
берет все внутри, как строку.
Итак, если вы делаете '$var'
– это строка с $
внутри.
"$str"
принимает значение $str
поэтому он печатает $var
$ str содержит литеральную строку $ var, которая никогда не будет интерпретироваться, так как она находится между одинарными кавычками.
Чтобы интерпретировать его, вам нужно eval ()
eval($str)
выдает 1042
Вы имеете в виду это?
<?php error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE); $var = 1024; $str = $var; echo $str, '<br>', "$str";
Вывод –
1024
1024
хе-хе