Последние статьи
Дефицит идей.На данный момент в сайтостроении, да и как везде, в общем то, наблюдается некий застой в решениях. Для сайтов...
Yandex с блекждеком и шлюхами.Как то размышляя о способах монетизации различных веб-проектов, я увидел некоторую нестыковку на...
Flash: построение графика с динамическим обновлением данных.До того, как я открыл для себя такие веши как Munin и прочие утилиты для отслеживания состояния серверов - я...
Защита комментариев от спама.Все люди, которые вели, ведут или собираются вести блоги, форумы или гостевые книги сталкиваются с...
Nginx и Bitrix. Использование их без использования апача. Встала тут задача поднять сервер, исключительно под сайты, написанные на базе CMS Bitrix (в силу...
Eval - наше все!Казалось бы, весь интернет напичкан статьями и рекомендациями к программистам, в которых говориться, что eval...
Кризис. Пожуем эту тему еще разок ? Бредоглава 0 (мы же программисты, у нас обязана быть нулевая глава :). Введение . О мировом экономическом...
Дизайн ЯндексаЯндекс в своем  желании заработать как можно больше демонстрирует просто потрясяющую способность...

Eval - наше все!

Казалось бы, весь интернет напичкан статьями и рекомендациями к программистам, в которых говориться, что eval - это в 99% ненужное зло и можно обойтись без него, а в остальном 1% - это настолько безграммотное проектирование проекта, что таких товарищей надо сразу стерилизовать, ибо использование eval в штатном режиме - это маразм. Как правило, последнее активно используется в библиотеках, реализующих RPC, и вызвано тем, что либо человек поленился почитать документацию и не использует хотя бы serialize - unserialize, или там WDDX с JSON, не говоря уж о диком количестве уже готовых RPC библиотек, типа XML-RPC или SOAP. Но тут разбираю Jooml-у, которая сама по себе оплот GPL программистов, и должна демонстрировать высокий класс программирования, хотя на уровне отсутствия ляпов по использованию стандартных функций PHP, и вижу следующий подарок: В файле store.payment_method_form.php от модуля интернет-магазина VirtueMart встречается конструкция:
if (include_once( CLASSPATH."payment/".$db->f("payment_class").".php" )) {
eval( "\$_PAYMENT = new ".$db->f("payment_class")."();");
}

демонстрирующая полное непонимание программиста, писавшего данный кусок азов программирования на PHP, а конкретно раздела: Variable variables (мы даже не обсуждаем вообще существования таких паттернов, как "Фабрика" или "Фабричный метод", которые призваны решать задачи такого рода). Судя по этому коду и зная популярность этой CMS и VirtueMart в частности, очень сильно хочется верить, что извне (то бишь используя пользовательские данные) менять что либо в $db->f("payment_class") нельзя... Иначе последствия, тем более в платежном модуле могут быть не только неприятными для интернет-магазина, но и для его покупателей.
вернуться в список статей