слияние — Понимание функции eval () переполнения стека

Я дизайнер, пытающийся превратиться в программиста. В последнее время я изучал некоторые 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\";")

приводит к объединенной строке.

Я действительно не могу понять, почему это должно работать.

1

Решение

Хорошо, вот что мы имеем:

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."

Вуаля!
Разрушитель ума, но действительно хороший пример для изучения механизмов.

0

Другие решения

вы должны получить два 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

Надеюсь, ты понял

0

По вопросам рекламы [email protected]