Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Когда оправдано использование eval ? 
:(
    Опции темы
Всемогущий
Дата 10.2.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Когда оправдано использование eval ?


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
skyboy
Дата 10.2.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



тогда, когда оно оправдано smile 
тогда, когда надо получить гибкость, даже ценой производительности. В первую очередь. Вообще, как сам понимаешь(только непонятно, зачем тогда спрашивать  smile ) ответ сильно зависит от конкретной задачи.
PM MAIL   Вверх
-=Ustas=-
Дата 10.2.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Всемогущий @  10.2.2007,  22:08 Найти цитируемый пост)
Когда оправдано использование eval ? 

Только в особых случаях, когда действительно оправдано использование eval.  smile 

ЗЫ. Если честно, то совсем не вижу, к чему ты клонишь.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Всемогущий
Дата 10.2.2007, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Цитата(-=Ustas=- @  11.2.2007,  00:19 Найти цитируемый пост)
Только в особых случаях


Пожалуйста опишите эти случаи.



--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
skyboy
Дата 10.2.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Всемогущий @  10.2.2007,  21:50 Найти цитируемый пост)
Пожалуйста опишите эти случаи.

Всемогущий, ну ты даешь! Ты что, думаешь набрать набор рецептов?! Это ж на то и творчество - потому что всё определяется конкретной задачей. хочешь - весь код формируешь и выполняешь через eval, хочешь - реализуешь pattern "Команда" через ООП и получаешь ту же самую гибкость. а хочешь - клепаешь кучу php - скриптов с разным функционалом и делаешь include того, что надо. путей - множество. выбираешь сам! 
PM MAIL   Вверх
-=Ustas=-
Дата 11.2.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Всемогущий @  10.2.2007,  22:50 Найти цитируемый пост)
Пожалуйста опишите эти случаи.

Один из самого простого и элементарного, это когда например тебе в процессе выполнения нужно унаследовать класс от друго класса, заранее неизвестного. Т.е. делать eval-ом промежуточный класс-посредник. Например:
Код

<?php

// Есть у тебя два класса

class Myclass1 
{
    //...
    // тут реализация
}

class Myclass2
{
    //...
    // тут реализация
}

// И если у тебя третий класс, который взависомости от условия должен наследовать
// либо Myclass1 либо Myclass2

// Вот тут и поможет тебе класс посредник

if ( /* то-то то-то */ ) {

    eval( 'class Inheritable extends Myclass1 { }' );
    
} else {
    
    eval( 'class Inheritable extends Myclass2 { }' );
}

// Вот. а реализацию нужного нам класса уже делаем с наследованием от посредника

class My_work_class extends Inheritable 
{
    //...
    // тут реализация
}

?>

Вот это например оправданный eval()  smile 


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
AztEK
Дата 11.2.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



eval is evil © кто-то

Единственный раз сталкивался с реальной необходимостью юзать eval:
надо было написать функцию, которая по строке типа "foo[subarray][subarray][blah]" выдать значение элемента массива: $foo['subarray']['subarray']['blah']


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 11.2.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



AztEK, А... print ${$str} ???????
Эвал всегда можно чем-то заменить... Всегда можно обойти..
PM ICQ   Вверх
szz
Дата 12.2.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Да, как сказал один умный дядя: "Если в вашей программе необходим эвал, то у вас что-то не так с проектированием".
  Я иногда использую эвал - но от лени. В любом из этих случаев можно обойтись без него, но лень-матушка ... smile
 Главная проблема эвала в том, что код в эвале никогда никакой ZO не оптимизирует. И еще это допускает вероятную угрозу безопасности.


--------------------
PM   Вверх
skyboy
Дата 12.2.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



у меня было - шаблон для fprinf брался из БД. так же(для каждого случая - динамически) определялся список  аргументов. Делался eval, чтоб вызвать функцию fprintf с заранее неизвестным числом аргументов. как мне надо было сделать это без eval?
PM MAIL   Вверх
Всемогущий
Дата 12.2.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



я не пропал,
 smile 
я всех внимательно слушаю и внимаю


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
szz
Дата 12.2.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



skyboy, у меня тоже была абсолютно такая же задача и поначалу  ее именно эвалом и решил.
 Но потом подумал, и несколько манипуляций со строкой шаблона - и я вообще без printf обошелся в итоге и бе эвала. Справился одними explode и implode smile


--------------------
PM   Вверх
AztEK
Дата 12.2.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Цитата(Mal Hack @  11.2.2007,  19:55 Найти цитируемый пост)
AztEK, А... print ${$str} ???????
Эвал всегда можно чем-то заменить... Всегда можно обойти.. 

я идиот smile  smile 
спасибо за наводку!


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
skyboy
Дата 12.2.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(szz @  12.2.2007,  13:11 Найти цитируемый пост)
Но потом подумал, и несколько манипуляций со строкой шаблона - и я вообще без printf обошелся в итоге и бе эвала.

у меня в шаблоне хранятся фразы для мультиязычного фейса, а шаблоном - потому как в разных языках морфология различна. порядок слов и всё такое. кроме того, вмоих фразах бывают ситуации вроде "что-то %1\$s здесь %2\$s и опять вот %1\$s", то есть количество мест для вставки отличается от количества аргументов - вроде как парсинг шаблона в этом случае приведет меня к написанию собственной функции printf, только гораздо более тормознутой smile
Жаль, что нельзя передавать вместо списка аргументов вывода массив аргументов(по крайней мере, у меня не получилось: "printf('%s',array('44444'));" вывело лаконичное "Array") smile
PM MAIL   Вверх
Mal Hack
Дата 13.2.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(skyboy @  12.2.2007,  09:38 Найти цитируемый пост)
чтоб вызвать функцию fprintf с заранее неизвестным числом аргументов.

А разве fprintf принимает конечное кол-во паратмеров?

А это на что?
Цитата

string vsprintf ( string format, array args )



PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0865 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.