Я дизайнер, пытающийся превратиться в программиста. В последнее время я изучал некоторые PHP-коды и руководства, а затем натолкнулся на пример кода для eval()
функция:
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
Это пример кода eval()
функция на официальном сайте PHP, и хотя это помогло мне понять eval()
функция, я не могу понять, как работает пример кода. чтобы быть более конкретным, я не могу понять, почему
("\$str = \"$str\";")
приводит к объединенной строке.
Я действительно не могу понять, почему это должно работать.
Хорошо, вот что мы имеем:
eval("\$str = \"$str\";")
Смотри, строка в двойных кавычках: это означает, что $
символ будет интерпретирован как начало переменной. Поэтому мы экранируем этот символ обратной косой чертой: \$
тогда это будет «означать» просто нормальный знак доллара. Кроме того, двойные кавычки внутри строки тоже должны быть экранированы.
В конце мы получаем эту строку: (Я изменил кавычки на одинарные, так $
не смущаю вас) '$str = "$str";'
, Смотри, теперь это больше похоже на нормальный код 🙂
Оценив это, PHP сделает следующее (для удобства я удалил внешние кавычки):
eval( $str = "$str" );
Обратите внимание на двойные кавычки и здесь. Это означает, что переменная внутри, опять же, будет проанализирована / интерпретирована.
Как $str
был изначально == 'This is a $string with my $name in it.'
, он будет вставлен в выражение и теперь будет выглядеть так:
$str = "This is a $string with my $name in it.";
И опять двойные кавычки! Он разбирает и подставляет переменные $name
а также $string
, давая нам в конце:
$str = "This is a cup with my coffee in it."
Вуаля!
Разрушитель ума, но действительно хороший пример для изучения механизмов.
вы должны получить два console.log, как это
This is a $string with my $name in it.';
This is a $cup with my $coffe in it.';
Зачем? ну сначала вы печатаете значение, из $str
, без Eval, а потом, вы Eval их, в основном это происходит,
Первый.
Распечатать $str
без Eval.
This is a $string with my $name in it.';
второй
этот кусок кода, работает eval("\$str = \"$str\";");
Eval заменить $string
а также $name
, с 2 новыми значениями переменных, которые $cup
а также $coffe
Надеюсь, ты понял