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

    +150

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    public function getBrandId() {
            if (key_exists("id", $_GET)) {
                return $_GET['id'];
            } else {
                return false;
            }
        }

    Писала значимая фигура студии, между прочим.

    Запостил: Grockles, 26 Января 2012

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

    • все правильно
      Ответить
    • а не легче?
      return isset($_GET['id']) ? $_GET['id'] : false;
      Ответить
      • Не легче.
        Ответить
      • читабельность твоего кода дерьмовая стремится к нулю и сложен в поддержке...
        Ответить
        • и что тут такого нечитабельного?
          тернарный оператор для того и придумали, чтобы не расписывать на несколько строчек элементарные действия.
          можно согласиться, если внутрь вставлены какие-то вычисления или вложенные тернарные операторы, но здесь не тот случай...
          Ответить
        • Т.е. куча таких тупых строк нормально?
          Не надо показывать свою глупость
          Во многих нормальных фреймворках такие операторы используются очень часто в столь примитивных потребностях
          Ответить
          • смотрим пример функции из Drupal 7
            function variable_get($name, $default = NULL) {
            global $conf;

            return isset($conf[$name]) ? $conf[$name] : $default;
            }
            Ответить
      • Не используйте isset в массивах, когда не уверены в значениях
        Ответить
        • Почему?
          Прежде чем давать такой комментарий, его необходимо обосновать.
          Разве что значение NULL
          Но на кой черт оно надо? Если нужен ID товара? Тип int.
          Ответить
          • С массивами это актуально. Даже если значение null - элемент влияет на длину массива
            Ответить
            • Пускай оно посмотрит что там не существует переменной поскольку она NULL
              Но сам смысл функции "getBrandId"
              Получить ID бренда.
              Возвращаемое значение должно быть INT
              На кой хрен нужен NULL? Тут и FALSE прекрасно подойдет!
              Код нужно писать по потребностям, а не потому что там может быть NULL, который нахрен не нужен на выходе этой функции.

              Тогда если судить по логике что там может быть NULL надо писать
              if (key_exists("id", $_GET) && is_numeric($_GET['id']) && ((int)$_GET['id'] > 0)) {
              return $_GET['id'];
              } else {
              return false;
              }
              Ответить
        • покажите мне массив, в котором есть isset
          Ответить
    • показать все, что скрытоjava-style
      Ответить
      • да как раз таки пыхапе стайл
        непонимание типизации
        неуменье пользоваться фрейм-ворками
        и вообше значимая фигура в мире ПХП равно дебил
        Ответить
        • Много раз видел что-то типа
          if() return true; else if() return "ololo"; else if() return $arr; else if() return -1;
          и в таком же духе. Это, очевидно, следствие злоупотребления объебосатами.

          Что касается значимых фигур (ферзей штоле?), то, чаще всего, чем выше девелопер, тем больше у него моск рака.
          Ответить
    • функции key_exists в стандартных функциях php нет. Это опечатка и там array_key_exists или всё-таки свою функцию сделали?
      Ответить
      • Скорее всего обертка над array_key_exists - думаю, человек очень много ей пользуется и ему в лом много печатать.
        Ответить
        • человек недостаточно ленив для программиста!
          даешь function ake()
          Ответить
      • Для обратной совместимости может быть использован следующий устаревший псевдоним: key_exists()
        php.net/array_key_exists
        Ответить
    • Пробовать лень, из праздного любопытства, а что PHP возвращает по-умолчанию, например:
      function f(){}
      $foo = f();

      Что будет в foo?
      Ответить
      • null
        Ответить
        • Так все лучше было бы чем false вернуть. null он все ж в PHP более универсальный, чем false... не?
          Ответить
    • По-моему, здесь все очевидно - автор кода оставил заглушку на получение идентификатора. На будущее, так сказать, чтобы потом уже дополнить ее проверками на существование указанного id и прочего. Этим, кстати, объясняется, почему не используется более короткий тернарный оператор - действий на проверку может быть много, их удобнее вносить внутри скобок, чем писать в строчку.
      ИМХО, довольно продуманный подход. С планами на будущее.
      Ответить
    • Блин, ну не говнокод же. Почитайте про isset, он с массивами иногда выдает неправильные результаты (если значение === null). Все правильно сделано
      Ответить
      • http://php.net/manual/ru/function.isset.php

        isset() вернет FALSE, если проверяемая переменная имеет значение NULL
        С массивами это актуально
        Ответить
        • интересно, как может из формы прийти null?
          так что в данном случае замечание несущественно.

          хотя в общем случае это надо учитывать,да
          Ответить
          • Вас не смущает, что у них логика работы разная?
            isset -> проверяет установку переменной
            array_key_exists -> проверяет ключ массива
            Не важно, что первый вариант короче. Нужно всегда использовать правильную функцию.
            И да, из формы может прийти null. Если форма отправляется аяксом. А это очень часто происходит.
            Ответить
            • надо, если различия существенны.
              меня обычно empty устраивает (да, 0 и "" тоже неинтересны)
              Ответить
    • показать все, что скрытоvanished
      Ответить

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