"PHP" / Говнокод #3272 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
static public function checkFingerprint($fingerprint = null)
{
    $user = ServiceFactory::getServiceUsers()->getByID((int)$_COOKIE['__MW__accountID']);
    $fingerprint = (isset($fingerprint)) ? $fingerprint : Users::getFingerprint();
    $flag = (bool)($fingerprint == $user->generateFingerprint());
    if ( $flag )
      return $user->userID;
    else
      return 0;
}

не только индусские разработчики бывают весёлыми - это творение взрослого афроамериканского собрата. Перестраховался везде где только мог. Особенно доставляет приведение к bool результата сравнения :)

Запостил: newmindcore newmindcore, (Updated )

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

  • не доверять никому, даже себе - в особенности себе! паранойя...
    Ответить
  • да, только забыл проверить куку на существование. интересно, что тогда попадет в $user?
    а вообще последние 5 строк функции можно сократить в один тернарный оператор.
    Ответить
    • да, можно сократить; и не последние пять строк, а всю функцию вообще.
      сейчас это выглядит так
      static public function checkFingerprint($fingerprint = null)
      {
         $user = ServiceFactory::getServiceUsers()->getByID((int)$_COOKIE['__MW__accountID']);
          return (($fingerprint ?: Users::getFingerprint()) == $user->generateFingerprint()) ? $user->userID : 0;
      }


      постарался сохранить максимум авторского колорита 🙂
      Ответить
      • 2 тернарных оператора тут - зло, настолько сужать код нельзя. Это же в ущерб читаемости.
        Ответить
        • нет, очень даже читаемо; если избавится от любого из операторов, то придётся опять повторяться и писать условные ветки
          Ответить
          • если будет 3 или 4 условные ветки, вы всё это нагородите тернарными операторами? Тернарный оператор нужно использовать для элементарного условия, притом одного.
            static public function checkFingerprint($fingerprint = null) {
              $user          = ServiceFactory::getServiceUsers()->getByID((int) $_COOKIE['__MW__accountID']);
              $fingerprint = isset($fingerprint) ? $fingerprint : Users::getFingerprint();
              return $fingerprint == $user->generateFingerprint() ? $user->userID : 0;
            }
            Ответить
            • 3 и 4 ветки конечно нет, да и эти два условия будь они чуть сложнее я не стал бы сливать в одну строку.

              При желании можно назвать это "поменял один говнокод на другой", но я называю это некоторым изяществом, которое позволяет php.
              Ответить
          • читаемость - тоже понятие субьективное. кому то брейсы {
            } тоже нечитаемы
            один прочитает и все понятно, другому нужна куча промежуточных переменных
            Ответить
            • чисто академически они менее читаемы, чем блоки "do - end", просто это уже "привычно" для всякого программиста =)
              Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8