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

    +165

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    foreach ($user as $field => $value) {
        if ($field == 'username') {
            $user[$field] = md5($value);
        }
    }

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

    Запостил: mr-lekafe, 18 Ноября 2014

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

    • Антипаттерн for-if.

      http://blogs.msdn.com/b/oldnewthing/archive/2011/12/27/10251210.aspx
      Ответить
      • Это не антипаттерн, это говнопаттерн. Как и бульщиты например.
        Антипаттерном я бы назвал скорее спорное решение, в котором зачастую сознательно отказываются от паттернов, допустим пишут свищ вместо создания фабрики.
        Или любовь Тараса к structам с публичными полями. Само по себе это не есть плохо.
        Ответить
        • >> Как и бульщиты например.
          А что за говнопатерн "бульщит"?
          Ответить
          • // typical boolshit
            if (b == true)
               return false;
            return true;
            И прочая ерунда от незнания логических операций.
            Ответить
            • Я когда-то на phpclub видал такой вопрос: "if ($var) выполняет код, если $var истино. А как мне выполнить его если $var ложно?"
              Ответить
      • Подглядел у коллег подобное в форме свитча.
        for(int i = 0; i < 11; i++) switch(i) {
        case 0: //...
        case 1: //...
        //...
        case 11: //...
        }
        Ладно сами антипаттерны показывать, лечить-то такое чем?
        Ответить
        • Зато тут можно произвольно прыгать между блоками, если менять i перед бряком :)
          Ответить
          • Это же паттерн Интерпретатор!
            а, ну да, программы же нет. Не подходит.
            Ответить
            • > программы же нет
              Мы ее здесь просто не видим. Она может быть в каком-то массиве.
              Ответить
        • Газом. Из доступного сейчас на рынке - Uragan D2
          Ответить
        • > лечить-то такое чем?
          Наверное, isset($user['username']); ну или array_key_exists('username', $user);
          Ответить
    • А вдруг холостой цикл нужен для того, чтобы сокрыть время поиска элемента массива?
      Ответить
      • Тогда почему нет break?
        Ответить
      • Он не холостой! В строке 2 сравнение на "==", поэтому этот цикл может поменять несколько значений.

        http://ideone.com/LA18Uj
        Ответить
        • Слона-то я и не заметил... Тогда это смешнее в разы!
          Ответить
        • Ох, я уж думал, что Вы - маг, а оказывается, просто периодически преподносите эту багу питуизации на том же блюде с золотистым рисуночком посередине, который каждый раз по-новому играет на солнце.
          Ответить
          • true == "хуй", а false == ""
            0 == "хуй" и 0 == "",
            но 0 != true

            Твой пых. Твои правила.
            Ответить
            • Рассказывают (на самом деле нет) что в новой версии PHP будет оператор ==== который вводит строгую типизацию и будет кидать exception в случае если операнды разных типов.
              Ответить
        • Можно еще иметь гомогенные ключи в ассоциативном массиве и не стрелять себе в ногу
          Ответить
    • Либо я недооцениваю предсказуемость тупизны, либо запостивший сие - пи**обол.
      Ответить
      • Всмысле Вы не видите в этом коде никаких проблем?)
        Ответить
        • Я вижу проблему, но мне видится пара вариантов.
          1) Раньше были и другие условия в цикле. Либо предполагается, что в скором времени они добавятся. Вобщем, пример явно подправленный или вырван из контекста.
          2) Программист действительно больной дебил.
          Ответить

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