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

    +161

    1. 1
    $period = in_array($bullRegionId,array_keys($periods)) ? $periods[$bullRegionId]['text'] : $periods['default']['text'];

    Интересна сама проверка на существование ключа, не правда ли? :-)
    Код мой. Коллега учуял, что от него несколько плохо пахнет и предложил запостить сюда))

    Запостил: Nemoden, 09 Сентября 2011

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

    • ну не так уж чтобы и гавно, вся оптимизация сведется к следующему

      $period = isset($periods[$bullRegionId]['text'])? $periods[$bullRegionId]['text'] : $periods['default']['text'];
      Ответить
      • isset($periods[$bullRegionId]['text'])

        выдаст E_NOTICE: Undefined index, если ключа $bullRegionId не существует.

        Для проверки ключа массива есть array_key_exists, которая еще и быстрей отработает, чем isset
        array_key_exists($bullRegionId, $periods) ? 
                   $periods[$bullRegionId]['text'] : $periods['default']['text'];


        Ну а вообще, не жуткий говнокод, конечно, но хуже у нас в проекте нету. Извините.
        Ответить
        • опечатался, извиняйте. конечно же не

          isset($periods[$bullRegionId]['text'])

          а просто

          isset($periods[$bullRegionId])
          Ответить
        • >>> но хуже у нас в проекте нету. Извините.
          Наглая ложь! Найдем еще, и много! ; )
          Ответить
          • Чуть меньше миллиона строк кода... Ну да, наверное найдем еще чего-нибудь :)
            Ответить
        • > isset($periods[$bullRegionId]['text'])
          > выдаст E_NOTICE: Undefined index, если ключа $bullRegionId не существует.

          Ничего не путаете?
          Ответить
    • $period = $periods[$bullRegionId]['text'] or $period = $periods['default']['text']

      ?
      Ответить
      • Будет тот же самый E_NOTICE :)
        Ответить
        • error_reporting(0);

          разруливает
          Ответить
          • У нас ошибки всех уровней логгируются в файл. Моё мнение по этому поводу: никаких ошибок никакого уровня быть не должно.
            Это в идеале :) На деле "не смертельные" ошибки у нас есть, конечно.
            Ответить
            • у меня такоеже мнение, а ошибки если и есть то логируются в базу) но в идеале, ни одного нотиса быть не должно.
              Ответить
        • хм, я проверял, перед тем как запостить и никакой ошибки не было:
          http://codepad.org/2v0cCi3P
          Если что, я плохо знаком с PHP
          Ответить
          • Ну codepad, конечно, E_NOTICE подавляет. Я думаю, что он все подавляет, кроме E_ERROR и E_CORE_ERROR
            Ответить
    • А если так:
      $regionId = in_array($bullRegionId, array_keys($periods)) ? $bullRegionId : 'default';
      $period = $periods[$regionId]['text'];
      ?
      Ответить
      • Так можно, но сам прикол в проверке существования ключа :) Намек на говнокод был именно в этом ;)
        Ответить
        • Да, я уже понял. В любом случае, повторяющиеся куски кода - плохо, поэтому оптимальным вариантом считаю следующий:
          $regionId = isset($periods[$bullRegionId]) ? $bullRegionId : 'default';
          $period = $periods[$regionId]['text'];
          Ответить
    • быки и коровы? ))
      Ответить
      • bull - наше сокращение от bulletin. Я когда начинал работать в компании привыкнуть сначала не мог, а теперь норм :)
        Ответить
    • $period = $periods[in_array($bullRegionId,array_keys($periods)) ? $bullRegionId:'default']['text'];
      Ответить
      • Ахахаха :) Да! Это можно еще раз запостить на говнокод, но уже синтетика :-(
        Ответить
    • показать все, что скрытоvanished
      Ответить

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