-Поиск по дневнику

Поиск сообщений в akry

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 21.08.2007
Записей:
Комментариев:
Написано: 40048

Вложенные функции в php — EVIL

Вторник, 15 Июня 2010 г. 14:10 + в цитатник

Долго-долго искал плавающего жука в программе и попутно обнаружил следующую особенность php: он весьма криво обрабатывает вложенные функции.

Например,

function foo ()
{
function callback_fn() {  }

$str = preg_replace_callback ($pattern, $replacement, 'callback_fn', $str);
}

запросто может вызвать ошибку типа 'Fatal error: Cannot redeclare callback_fn'. Особенно если foo() внутри класса.

Процитировать пост: Процитировать в LiveJournal!Процитировать в FaceBook!Процитировать в Twitter!Добавить блог РІ GoogleReader!
Рубрики:  Всякое
Метки:  



ASGAlex   обратиться по имени Вторник, 15 Июня 2010 г. 15:37 (ссылка)
Вообще-то объявление функции внутри другой функции действительно выглядит по меньшей мере странным. Я хоть ни разу и не пробовал, но у меня стойкое чувство, что тот же компилятор С++ за такое бы послал... и был бы прав, чесслово!
Ответить С цитатой В цитатник
Перейти к дневнику

Вторник, 15 Июня 2010 г. 15:42ссылка
Ага, gcc шлёт в случае с C++. Но разрешает для C.
Иногда вложенные функции удобны для инкапсуляции. Те же колбэки за пределами функции никому не интересны.
Перейти к дневнику

Вторник, 15 Июня 2010 г. 15:44ссылка
Тут рассказывается, почему в C/C++ нет вложенных функций, но это не правда. По крайней мере в gcc вложенные функции есть.

Код, который проверял:

main () {
void foo () {};
foo ();
}
Перейти к дневнику

Вторник, 15 Июня 2010 г. 15:54ссылка
Да, чёрт возьми! "gcc -x c -o a.out foo.c" схавал за милую душу, а вот с++ послал!

asgalex@LinuxMint ~ $ gcc -x c++ -o a.out foo.c
foo.c: In function ‘int main()’:
foo.c:3: ошибка: a function-definition is not allowed here before ‘{’ token
foo.c:4: ошибка: нет декларации ‘foo’ в этой области видимости

И всё-таки я не понимаю необходимость объявлять функцию внутри функции... никогда, по крайней мере, её не испытывал. Даже goto пользовался только во времена освоения бейсика.
akry   обратиться по имени Вторник, 15 Июня 2010 г. 15:51 (ссылка)
О, нашёл, как защититься от ошибки 'cannot redeclare'. Но всё равно наверное не стоит вложенные функции использовать.
Ответить С цитатой В цитатник
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:03ссылка
PHP:

if(!function_exists('foo')){
    function 
foo($arg1) {
         return 
$arg1;
    }
}


Жееесть %) У меня культурный шок %)
Так вот становятся националистами по языковому признаку...
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:04ссылка
Разве бывают true программеры, которые пишут только на одном языке? :)
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:05ссылка
Кстати, идея. «Языковые скинхеды».
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:06ссылка
На ЛОРе такие есть, идея не нова ))))
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:07ссылка
А какое у них кредо?
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:14ссылка
Варианта два:
1). С/С++, asm - древние бронтозавры, существование которых бессмысленно, иненужно, потому что javascript рулит. На этих языках якобы даво ничего не пишется, потому что они, будто бы, слишком сложные. Тот факт, что на чем-то всё-же надо писать те же драйвера, ничуть не смущает. Характерно для школьников-неосиляторов.

2). Системные языки рулят, всё остальное - поделки для школоты, неосилившей нормальные ЯП. Характерно для тех кто как раз осилил, давно этим занимается и уже далёк от понимания людей, только делающих первые шаги на пути изучения языков.
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:19ссылка
Хе, а что делать тем, кто и на асме и на пхп пишет? Разорваться? :)

Имхо риал программер умеет сначала программировать, а потом уже выбирать язык под конкретную задачу. Неплохо освоить новый язык ведь можно за неделю-две.
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:25ссылка
На ЛОРе они обычно служат примирителями в споре... Хотя ЛОР же... неадекватность и максимализм поощряются, как явления более зрелищные )))

Хотя, признаюсь, многофункциональность с++ сильно меня привлекает. Однако да, в случае интернет-сервисов это не по адресу.
...с другой стороны... java, javascript, php... у меня стойкое чувство, что это всё бессовестно скатано с С++ с последующей адаптацией.

Сейчас в ходе некоторого переосмысления прихожу к мысли, что важнее не уметь программировать, а уметь проектировать.
Перейти к дневнику

Вторник, 15 Июня 2010 г. 16:30ссылка
Ну и пусть скатано, языки вообще все похожи.
Я писал сайты и на C, и на С++ — так на PHP гораздо быстрее получается. А ключевые по производительности блоки можно написать на C подключаемыми модулями к PHP. Очевидно, что у каждого языка есть своя область применения :)

ЛОР да… Как только они уходят от задачи описания мемов, начинается страшное.
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку