PHP 5.3: что нового
На «Хабре» хорошая обзорная статья рассказывающая о том, что нового в PHP 5.3.
P.S. почему к любой статье по PHP обязательно появится коментарий с полной пургой, а?
Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.
На «Хабре» хорошая обзорная статья рассказывающая о том, что нового в PHP 5.3.
P.S. почему к любой статье по PHP обязательно появится коментарий с полной пургой, а?
Потому что это хабралюди, питаемые хабрасилой.
Про лейблы, кстати, для меня тоже осталось загадкой.
Комментарий для decil.livejournal.com:
Ну а что такого? В Си есть, в Perl есть, почему бы в PHP ему не быть? Я даже знаю случаи, когда бы я использовал goto.
Комментарий для Евгения Степанищева:
О! Ну хоть кто-то такие случаи знает:)
Очень было бы интересно узнать. Только не «поточные парсеры», ради бога.
про «PS»:
есть люди, которые не знают пхп, но знают, что нужно сказать с умным видом, чтобы произвести впечатление на себе подобных. Их не волнует, что реальные спецы над ними смеются, реальных спецов мало.
Справиться с этим явлением, имхо, невозможно. Можно только натренировать в голове отдельный фильтр сигнал/шум.
Комментарий для david-m.livejournal.com:
Да не. Ну, например.
if (A) {
foo();
goto OUT;
}
if (B) {
bar();
goto OUT;
}
otherwise();
OUT:
щас я делаю это через for :)
Комментарий для astur.net.ru:
Ну вот как-то в статьях по Python этого всего меньше. Хотя язык-то тоже очень простой.
Комментарий для Евгения Степанищева:
Э… я, может, не так понял глобальную идею, но разве это не:
if (A) foo();
elseif (B) bar();
else otherwise();
?
Комментарий для Евгения Степанищева:
Вообще, простота языка — это не показатель, культура сообщества тоже имеет значение. Python-программеры воспитаны не на клепании сайтов на радость тупым заказчикам, а на скриптовании серьёзных десктопных приложений и плагинов к ним, поэтому их статьи — это не винегрет из понтов и заготовок кода, а вдумчивый анализ проблем разработки. Вспомни, кто ещё в начале века был королём запросов типа «Шаблоны на PHP для чайников», а кто сейчас лидирует по запросам типа «выбор хостинга для django»? Просто сравни этих людей, как невольных воспитателей сообществ (благо, ты знаком с обоими). Спецы получают то сообщество, которое воспитывают, вот и всё.
Комментарий для david-m.livejournal.com:
for ($i=1; $i--;) {
$foo = make_me_foo();
if (!$foo) break;
$bar = bar_from_foo($foo);
if (!$bar) break;
...
}
Комментарий для david-m.livejournal.com:
Неправильно написал. В два часа ночи-то :)
if (A) {
foo();
goto MORE;
}
if (B) {
bar();
goto MORE;
}
goto OUT;
MORE:
somethingelse();
OUT:
Комментарий для Евгения Степанищева:
Это всё можно и без GOTO сделать. А вот что с ним удобно делать, так это выход из вложенных циклов.
Комментарий для voldmar.ru:
Я это сейчас делаю for’ом, как я уже написал.
Выход из вложенных циклов можно делать через break. Например, «break 2» — выход на две конструкции наверх.
Комментарий для Евгения Степанищева:
Мануал надо читать внимательно. Спасибо :), я через триггер это делал.
Комментарий для Евгения Степанищева:
А не проще somethingelse(); вместо goto MORE; написать в этом случае?
Комментарий для Евгения Степанищева:
$found_something = true;
if (A) foo();
elseif (B) bar();
else $found_something = false;
if ($found_something) somethingelse();
Я согласен, что переменные-флаги — это моветон, но уж точно не больший моветон, чем goto. А читаемость логики, нмв, выше.
Ну и чисто для приколоться:
if ( A and foo() or B and bar() ) somethingelse();
Комментарий для david-m.livejournal.com:
Последнее пройдёт, если там действительно функции foo и bar, обычно там логики побольше.
Флаги — хороший выход, многие так и делают :) Никакого изврата тут нет и я это не считаю моветоном, но я извращаюсь через for :)
Потому что в микробиологии и астрофизике разбираются немногие, зато в кино и PHP — все. Отсюда и качество комментариев — они более заметны и обладают бОльшим диапазоном разброса качества.
Комментарий для anton-ikonnikov.moikrug.ru:
Не надо так серьёзно псевдокод анализировать. В этом блоке дофига кода.
Эм, я бы сделал
if ($a || $b) {
if ($a)
foo();
if ($b)
bar();
somethingelse();
}
Косовато, да, но всяко лучше goto и циклов.
Или я чего—то не понял?
То есть да, даж в ядре у Линуса порядочно goto, но там есть свои причины для этого.
Лично я за последние 10 лет не испытывал необходимости (и более того, даже желания) использовать метки.
Проблема даже не в появлении меток, как таковых, а в том, что молодняк, ринувшийся «праграмить сайты» начнет их использовать без разбору, как это было с бэйсиком.
if ($b) читать как elseif ($b) :)))
Комментарий для decil.livejournal.com:
А чем оно лучше? Циклом мне кажется читаемее. Кроме того, нет проверки одного и того же, да и $b не вычисляется где не надо.
Комментарий для Евгения Степанищева:
«В этом блоке дофига кода»
А нельзя его в отдельную функцию выделить?
Я чисто как ламер, для самообразования спрашиваю.
В приведенной конструкции смущает же не goto MORE;, а goto OUT;
Комментарий для anton-ikonnikov.moikrug.ru:
Можно :)
Я использую эту конструкцию именно для того, чтобы не уносить ничего в отдельную функцию.
Комментарий для decil.livejournal.com:
Какой ужос.... :)
if && !foo( || ($b && !bar()) somethingelse();
Комментарий для ugh.ru:
Ой, проворонил. Нечто подобное уже было, тока помоему нерабочее.... :)
Комментарий для ugh.ru:
Я ж говорю — не надо так на псевдокод орентироваться. Ну представьте, что вместо foo() стоит unset($smth);, вместо bar() — fclose($fp); $result = sin($a);
Комментарий для Евгения Степанищева:
падумаешь... ну вместо короткой !foo() будет чуть длинее (foo() || 1) ...
ой, ёёё!!! Помню как с break N столкнулся... До сих пор не понимаю, ЗАЧЕМ так сделано, а не break LABEL?
Комментарий для ugh.ru:
А стоило подумать. unset не функция, её нельзя применять внутри if.
Комментарий для masterspammer.livejournal.com:
Проще. Кроме того, break LABEL == goto LABEL
Комментарий для Евгения Степанищева:
Проще... А потом удаление цикла вынуждало менять break во вложенном цикле, что вообще-то достаточно неочевидно. Учитывая, что реально break как и goto ОЧЕНЬ полезен при большом количестве вложенных циклов — как раз в этом случае будет максимальный геморрой.
Комментарий для masterspammer.livejournal.com:
Проще в реализации, я имею ввиду.
Комментарий для Евгения Степанищева:
Это да, но не в применении.
В Perl оно мне больше нравится — блок (цикл) можно пометить меткой, а потом где-то внутри — сказать «last эта_метка» — независимо от уровня вложенности.
Комментарий для baka.name:
Вот как-то так, да, оно удобнее — при удалении цикла программа должна стать СИНТАКСИЧЕСКИ неверной, а не изменить своё поведение. После перла __такое__ исполнение казалось чем-то варварским, похожим на номера строк.
Комментарий для masterspammer.livejournal.com:
Ну, Perl, всё-таки, не образец для подражания, хотя там есть множество интересных вещей. С рассуждениями про break LABEL я согласен.
Комментарий для Евгения Степанищева:
http://bolknote.ru/all/1655#25
he-he
Комментарий для hshhhhh.name:
В чём прикол? В том, что я поменял своё мнение? Мне кажется, что сверхнормально.
Потому что PHP — язык с убийственно кривым дизайном: только глобальные функции, только глобальные классы, нет ссылок на функции.
Поэтому его и поносят.
Комментарий для shmatrix.livejournal.com:
Я не говорю о том, что его поносят, я говорю о низком уровне тех, кто комментирует эти статьи.
Даже с таким дизайном можно нормально жить. Функции глобальны? Используем статические методы внутри класса, который служит package’м, нет ссылок на функции? Используем ссылки на классы.