1. PHP / Говнокод #5422

    +160

    1. 1
    2. 2
    3. 3
    if ( isset($this->q_param["submit_form_one"]) && is_numeric($this->q_param["submit_form_one"]) && $this->q_param["submit_form_one"] == 1 ){
    //тут разный код
    }

    ппц

    Запостил: ilyamx, 28 Января 2011

    Комментарии (26) RSS

    • В чём проблема? Не вижу ничего криминального.
      Ответить
    • второе условие лишнее, я так понимаю.

      ученик КО.
      Ответить
      • '1qwe' == 1

        будет истиной. Не зная что там делается внутри условия и после условия нельзя сказать с полной уверенностью плох ли код.
        Ответить
        • ах да! ебанутая неочевидная типизация.
          все равно второе условие лишнее, а в последнем случае ===.
          Ответить
          • И опять нет : )
            '1' === 1
            - будет ложью
            Ответить
            • (int)'1' == 1
              Ответить
              • Не знаю что там дальше в условии, но, возможно, и надо было отсечь нечисловое значение.
                Ответить
    • Единственная какашка - это то что каждый раз делается выборка из массива, которая в PHP работает через жопу. Поэтому лучше где-то сделать $<имя_переменной>= $this->q_param["submit_form_one"], а потом делать проверки. Хоть это и экономия на спичках, читабельность кода от этого выиграет, поэтому кеширование выборки из массива - хороший тон.
      Ответить
    • "Краще перебдіть чим недобдіть" (с) Лесь
      Ответить
    • вот как в мире пхп принято лечить убогий идиотизм под названием "отсутствие статической типизации"
      Ответить
      • не просто отсутствие (ща уже можно задавать тип аргументов), а полное отсутствие - что для переменной нельзя задать тип вообще
        Ответить
        • нельзя
          можно указать класс для переменной типа "object".

          пхп это театр асбурда
          Ответить
          • верно.
            assбурда
            Ответить
          • но я еще верю, что пых или протянет ноги, или хотя бы их выпрямит, что бы не стыдно было по интырнетам шляться в таком количестве
            Ответить
            • ничего он не выпрямит.
              что бы писать песни для радио шансон -- не нужно быть поэтом.
              что бы играть в рекламе -- не нужно быть актером.
              что бы быть самым популярным язком в интернете -- не нужно быть хорошим
              Ответить
      • Ну есть же и нормальные динамически типизированные языки, без таких загибов.
        Ответить
        • [sarcasm]JavaScript?[/sarcasm]
          Ответить
          • полно своих загибов, см. "обьектный"
            Ответить
          • Да любой. Я не могу вспомнить другой язык с настолько странным неявным преобразованием типов. Даже весь из себя строкотипизированный Tcl в этом отношении последовательнее и удобнее.
            Ответить
      • Я вообще всегда думал, что изначально отсутствие типизации было продиктовано одним стремлением - стремлением к простоте. То есть, упрощение компилятора и упрощение кода, где есть универсальный тип, в который всё влезет. Ну и, соответственно, это приводит ко снижению порога вхождения. Возможно, если бы сразу PHP был лютым языком со статической типизацией, просто бы не нашлось такого обилия не-программистов. И он не стал бы популярным.
        Типичный эволюционизм - выживает самый приспособленный. Он может быть слабый, тупой и совершенно без чувства юмора, но вот нате - подходит для условий.

        А сейчас, конечно, да. За что боролись, на то и напоролись.
        Ответить
        • изначально -- да
          если Вы пишете скрипт на баше, который должен отправлять на принтер отчет о логинах на сервер, и запускаться по крону -- то конечно типизация Вам нафиг не нужна

          а если Вы пишете крупную корпоративную систему или цмс, то без типизации получается огронмый, не поддерживаемый, не читаемый, не рефакторингуемый кусок слипшегося дерьма, коим и являются 99% PHP проектов
          Ответить
          • компромисс удалось таки найти питону и груви
            Ответить
          • > если Вы пишете скрипт на баше, который должен отправлять на принтер отчет о логинах на сервер, и запускаться по крону -- то конечно типизация Вам нафиг не нужна

            Ога. Вот только в интернетах полно историй одминов про то, как был написан и заюзан скрипт в две-три строки. Заканчиваются эти истории примерно так: "И тогда я узнал, что такое бэкап БД :(" и т. д.
            И всё из-за пропущенного символа, опечатки и т. п.

            Имхо, даже малюсенький скрипт удобнее (потому что безопаснее) писать на языке со строгой статической типизацией. Я так и делаю.
            Ответить
        • Вот простоты-то и не хватает. Вот зачем нужно было в булевском контексте строку "false" воспринимать как FALSE? Да и неявное преобразование строк в числа скорее мешает.
          Ответить
    • странно: любое обсуждение говнокода из раздела пхп сводится к дискуссии на тему степени убогости языка.
      видимо, наболело
      Ответить

    Добавить комментарий