Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Fatmarmelad
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,613

Как работает eval?

17.07.2022, 17:36. Показов 528. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый!
Не могу понять, как работает eval()?

из документации
eval — Выполняет код PHP, содержащейся в строке

Дальше идёт пример

PHP
1
2
3
4
5
6
$string = 'чашка';
$name = 'кофе';
$str = 'Это $string с моим $name.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
В пятой строке выполняется, если я не ошибаюсь

PHP
1
$str ="$str";
Но если я изменю пятую строку на этот код, код не работает как в первом примере. То есть код не выполняется, но я как понимаю должны происходить те же самые действия, что и в eval.

PHP
1
2
3
4
5
6
$string = 'чашка';
$name = 'кофе';
$str = 'Это $string с моим $name.';
echo $str. "\n";
$str ="$str";
echo $str. "\n";
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2022, 17:36
Ответы с готовыми решениями:

eval() не работает
ситуация такая: есть несколько страниц на которых есть ряд компонентов со своими настройками и прочим появилась задача вывести эти...

не работает eval, если обращаться к скрипту через ajax
нужно считать настройки из файла и записать в переменные. Делаю так: $Options = file("OPTIONS.txt"); foreach ($Options...

Eval не работает с дробными числами
Добрый вечер, господа. Возникли проблемы с eval в vb.net (visual studio 2008) Написал процедуру функцию Function f(ByVal fx As...

4
Невнимательный
 Аватар для ft4l
3112 / 1291 / 359
Регистрация: 08.02.2013
Сообщений: 7,566
Записей в блоге: 2
17.07.2022, 18:42
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
В пятой строке выполняется, если я не ошибаюсь
в eval() подсовывается строка $str ="Это $string с моим $name.";

Цитата Сообщение от Fatmarmelad Посмотреть сообщение
должны происходить те же самые действия,
нет. Для $str ="$str";выполняется интерполяция переменной $str, но не "переменных" в её содержимом
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
18.07.2022, 15:57
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Но если я изменю пятую строку на этот код, код не работает
ошибки с кавычками

PHP
1
2
3
4
5
6
7
<?php // example 1
$string = 'чашка';
$name = 'кофе';
$str = "Это $string с моим $name.";
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
PHP
1
2
3
4
5
6
7
<?php // example 2
$string = 'чашка';
$name = 'кофе';
$str = "Это $string с моим $name.";
echo $str. "\n";
$str ="$str";
echo $str. "\n";
0
 Аватар для Fatmarmelad
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,613
19.07.2022, 20:53  [ТС]
ft4l, в eval выполняется
Цитата Сообщение от ft4l Посмотреть сообщение
"переменных" в её содержимом
внутри eval выполняется код PHP и за пределами eval выполняется код PHP по разному, в чём особенность?
0
Невнимательный
 Аватар для ft4l
3112 / 1291 / 359
Регистрация: 08.02.2013
Сообщений: 7,566
Записей в блоге: 2
19.07.2022, 22:03
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
в eval выполняется
на то и нужнно eval('....').
Пример просто такой, где оно не нужно,)
можно просто использовать даойные кавычки вместо апострофов.

Цитата Сообщение от Fatmarmelad Посмотреть сообщение
в чём особенность?
eval() вообще лучше избегать,) если есть возможность, но иногда с ним кое-что удобнее.
В последний раз, я использовал в инсталяторе для сохранения/восстановления в сессию данных из объекта.
Чтобы при переходе по страницам/этапам восстановить состояние установки.

Методы упаковки данных и распаковки с eval()
PHP
1
2
3
4
5
6
7
8
9
    public static function export() {
        return base64_encode(gzdeflate(
        'return '. var_export(['STATUS'=>self::$STATUS,'DATA'=>self::$DATA], 1).';'));
    }
    public static function import($str) {
        list('DATA'=>self::$DATA, 'STATUS'=>self::$STATUS)
            = eval(gzinflate(base64_decode($str)));
        self::init();
    }
восстановление с этим eval из сессии при вызове этого install.php
PHP
32
33
if (isset($_SESSION['InstApp'])) App::import($_SESSION['InstApp']);
else App::init();
и добавлял вызов в конце обработчика сброс в сессию
PHP
1
HOOK::add('PageEnd', '1', function(){ $_SESSION['InstApp'] = App::export();});
Вроде работало... но я там чего-то чудил ,) эксперементируя со сжатием данных было средне дофига
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2022, 22:03
Помогаю со студенческими работами здесь

SubLimeRepl Eval in REPL не работает
Не работает команда SubLimeRepl/Eval in REPL в Pyton. Точнее работает но консоле пишет вот что Traceback (most recent call last): ...

Eval не работает для лидирующих нулей
Всем привет. Почему eval не работает, если туда положить такую строку: print(eval(&quot;001+002&quot;))? А если с лидирующими нулями eval...

Eval Как правильно применить
Добрый день. как правильно применить функцию eval , если это корректно в данном случае matr300=ones(9,300); ya=20; ...

Как декодировать eval gzinflate base_64?
Я пытался декодировать данный код с помощью виртуальной машины и некоторых сервисов, но мне дало лишь случайный набор символов. Дело в том,...

Как обойти ошибочное выполнение eval?
Семерка без приблуд try{ $eval_res = @eval($code_for_eval); } catch (Throwable $t) { return $fld_value; } ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru