Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: В чем сущность оператора eval ?
 
 автор: Владимир55   (08.10.2009 в 13:16)   письмо автору
 
 

Если я правильно понимаю, то появление оператора eval автоматически исполняет то, что в текстовом виде присутствует в его аргументе.

Например.

    $abc = 'for ($k = 1; $k <=5; $k++)';
    echo "<br>", $abc, "<br>";
    eval("$abc");
    echo "<br>k = $k ";


Здесь первый опрератор echo выводит вот что:
for ($k = 1; $k <=100; $k++)


Я ожидал, что второй оператор echo выведет последовательность цифр от 1 до 5. Но вместо этого появляется число 6. То есть, цикл прошел внутри eval .

А как построить код, что бы при использовании оператора eval в приведенном виде, не вписывая в $abc выражение
echo "<br>k = $k ";
, получить последовательность 1-2-3-4-5 ?

========
Хочется научиться конструировать сложный код по частям из текстовых выражений.

  Ответить  
 
 автор: Саня   (08.10.2009 в 13:42)   письмо автору
 
   для: Владимир55   (08.10.2009 в 13:16)
 

Так нельзя. Прийдётся весь код скадывать в одну переменную и исполнять.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 13:45)   письмо автору
 
   для: Саня   (08.10.2009 в 13:42)
 

Жаль...

  Ответить  
 
 автор: cheops   (08.10.2009 в 13:47)   письмо автору
 
   для: Владимир55   (08.10.2009 в 13:45)
 

Это плохой оператор. Разметку в строковой переменной не видно, ошибки, если они возникли - вам не сообщаются, отлаживать такой код очень сложно.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 14:00)   письмо автору
 
   для: cheops   (08.10.2009 в 13:47)
 

Весьма неудобно, но я пока не вижу другого решения, поскольку код, который нужно исполнить, "сочиняет" сам скрипт исходя из внешнего задания.

Прежде я для этой цели формировал дополнительный рнр-файл, куда и записывал сформированный код. А потом этот дополнительный файл инклюдил или переходил на него, передавая данные в сессии. Это громоздко для отладки, ибо требуется последовательно вызывать несколько файлов.

Хотя и здесь - Вы правы! - не лучше.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования