PHP 5.3: что нового
На «Хабре» хорошая обзорная статья рассказывающая о том, что нового в PHP 5.3.
P.S. почему к любой статье по PHP обязательно появится коментарий с полной пургой, а?
На «Хабре» хорошая обзорная статья рассказывающая о том, что нового в PHP 5.3.
P.S. почему к любой статье по PHP обязательно появится коментарий с полной пургой, а?
Комментарии 41
Потому что это хабралюди, питаемые хабрасилой.
Про лейблы, кстати, для меня тоже осталось загадкой.
Очень было бы интересно узнать. Только не «поточные парсеры», ради бога.
if (A) {
foo();
goto OUT;
}
if (B) {
bar();
goto OUT;
}
otherwise();
OUT:
щас я делаю это через for :)
есть люди, которые не знают пхп, но знают, что нужно сказать с умным видом, чтобы произвести впечатление на себе подобных. Их не волнует, что реальные спецы над ними смеются, реальных спецов мало.
Справиться с этим явлением, имхо, невозможно. Можно только натренировать в голове отдельный фильтр сигнал/шум.
Э… я, может, не так понял глобальную идею, но разве это не:
if (A) foo();
elseif (B) bar();
else otherwise();
?
Вообще, простота языка — это не показатель, культура сообщества тоже имеет значение.
for ($i=1;
$foo = make_me_foo();
if (!$foo) break;
$bar = bar_from_foo($foo);
if (!$bar) break;
…
}
Неправильно написал. В два часа
if (A) {
foo();
goto MORE;
}
if (B) {
bar();
goto MORE;
}
goto OUT;
MORE:
somethingelse();
OUT:
Это всё можно и без GOTO сделать. А вот что с ним удобно делать, так это выход из вложенных циклов.
Выход из вложенных циклов можно делать через break. Например, «break 2» — выход на две конструкции наверх.
Комментарий для Евгения Степанищева:
Мануал надо читать внимательно. Спасибо :), я через триггер это делал.
А не проще somethingelse(); вместо goto MORE; написать в этом случае?
$found_something = true;
if (A) foo();
elseif (B) bar();
else $found_something = false;
if ($found_something) somethingelse();
Я согласен, что
Ну и чисто для приколоться:
if ( A and foo() or B and bar() ) somethingelse();
Последнее пройдёт, если там действительно функции foo и bar, обычно там логики побольше.
Флаги — хороший выход, многие так и делают :) Никакого изврата тут нет и я это не считаю моветоном, но я извращаюсь через for :)
if ($a || $b) {
if ($a)
foo();
if ($b)
bar();
somethingelse();
}
Косовато, да, но всяко лучше goto и циклов.
Или я чего–то не понял?
Лично я за последние 10 лет не испытывал необходимости (и более того, даже желания) использовать метки.
Проблема даже не в появлении меток, как таковых, а в том, что молодняк, ринувшийся «праграмить сайты» начнет их использовать без разбору, как это было с бэйсиком.
А чем оно лучше? Циклом мне кажется читаемее. Кроме того, нет проверки одного и того же, да и $b не вычисляется где не надо.
«В этом блоке дофига кода»
А нельзя его в отдельную функцию выделить?
Я чисто как ламер, для самообразования спрашиваю.
В приведенной конструкции смущает же не goto MORE;, а goto OUT;
Можно :)
Я использую эту конструкцию именно для того, чтобы не уносить ничего в отдельную функцию.
Какой ужос…. :)
if (($a && !foo()) || ($b && !bar()) somethingelse();
Я ж говорю — не надо так на псевдокод орентироваться. Ну представьте, что вместо foo() стоит unset($smth);, вместо bar() — fclose($fp); $result = sin($a);
падумаешь… ну вместо короткой !foo() будет чуть длинее (foo() || 1) …
А стоило подумать. unset не функция, её нельзя применять внутри if.
Проще… А потом удаление цикла вынуждало менять break во вложенном цикле, что
Проще в реализации, я имею ввиду.
Это да, но не в применении.
В Perl оно мне больше нравится — блок (цикл) можно пометить меткой, а потомгде-то внутри — сказать «last эта_метка» — независимо от уровня вложенности.
Ну, Perl,
Комментарий для Евгения Степанищева:
/all/1655#25
he-he
В чём прикол? В том, что я поменял своё мнение? Мне кажется, что сверхнормально.
Потому что PHP — язык с убийственно кривым дизайном: только глобальные функции, только глобальные классы, нет ссылок на функции.
Поэтому его и поносят.
Даже с таким дизайном можно нормально жить. Функции глобальны? Используем статические методы внутри класса, который служит package'м, нет ссылок на функции? Используем ссылки на классы.