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

    +162.1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    if ( !empty($a1) ||
         !empty($a1) && !empty($a2) ||
         !empty($a1) && !empty($a2) && !empty($a3) ||
         !empty($a1) && !empty($a2) && !empty($a3) || && !empty($a4) ||
         !empty($a1) && !empty($a2) && !empty($a3) || && !empty($a4) || && !empty($a5) ||
    ...
         !empty($a1) && !empty($a2) && !empty($a3) || && !empty($a4) || && !empty($a5) || && ... !empty($a8) )
    {
     // что-то делать...
    }

    Уже и не припомню где именно, но всретил я такую проверочку на рабочем сайте:
    После небольшой оптимизации получилось нормально условие... кто скажет какое ???

    Запостил: Death, 24 Февраля 2010

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

    • if ( !empty($a1) ||
      !(empty($a1) || empty($a2)) ||
      !(empty($a1) || empty($a2) || empty($a3)) ||
      ......
      Так?
      Ответить
    • || &&

      Это что за хрень?
      Ответить
    • !empty($a1)
      Уже обращает выражение в true.
      Ответить
    • на рабочем сайте это могло быть только картинкой
      Ответить
    • Каждое следующее условие - подусловие предыдущего.
      Так что !empty($a1).

      > !empty($a1) Уже обращает выражение в true.

      Ну я пых не знаю, поэтому чисто с точки зрения логики сказал.
      Ответить
    • if ( !empty($a1) )
      {
      // что-то делать...
      }

      :)
      Ответить
      • кстати сказать, "|| &&" выдает подделку :)
        автор, выпей кой-чего
        Ответить
        • А что с ними не так?
          Ответить
        • Кэп каг-бэ намекает, что это результат сжатия кода.
          Ответить
        • С чего такие мысли???
          || === or
          && === and
          Ответить
          • А где Вы видели, чтобы эти два оператора шли друг за другом?
            Ответить
          • Скорее ==, потому что у них приоритет разный всё-таки. У or и and он едва ли не самый низкий среди всех операторов, допустимых в выражениях.
            Ответить
    • Если обязательно наличие элемента а1, то достаточно...
      if(!empty($a1))
        return true;
      return false;


      Если должно быть наличие хотя бы одного элемента, то...
      if(empty($a1) AND empty($a2) AND ... empty($a8))
        return false;
      return true;
      Ответить
    • Правильный ответ это

      guest 16 часов назад # +1
      !empty($a1)
      Уже обращает выражение в true.

      при этом !empty($a1) можно упрощённо написать просто как if ($a1)
      Спасибо всем, кто пытался поливать гразью в комментах...
      Кстати, операторы && и || такие-же php-ый как и сишные...
      Ответить
      • Может в Си и можно писать подряд два логических оператора, а в PHP такого нет
        Ответить
        • Уверены??? проверьте.

          zxm
          http://www.php.net/manual/en/language.operators.logical.php
          Ответить
          • Если у Вас выполнится этот код
            <?
            if ($a1 || && $a2) {
            }
            ?>
            я Вам медальку дам

            zxm
            А да, протупил.
            Ответить
            • Готов выдать ответный орден за выполнение кода
              if ($a1 or and $a2) :)

              Вы наверно про опечатку в примере... говорите... не увидел, то я ошибся гогда набирал... Sorry
              Ответить
              • Мне то за что? Это у Вас в коде написано два подряд логических оператора и утверждаете, что такая конструкция есть в PHP
                Ответить
                • Уже понял про что вы говорите.

                  не увидел, то я ошибся когда набирал... Sorry.
                  хотя это уже не принципиально...
                  Ответить
      • >>!empty($a1) можно упрощённо написать просто как if ($a1)
        Нельзя так писать.
        1) 0, пустая строка и false это не емпти
        2) warning
        Ответить
        • > 1) 0, пустая строка и false это не емпти
          А что?
          Ответить
          • протупил сорри, это же не isset()
            но if() сгенерит warning, если переменной нет, тут я не ошибся.
            но мне собственно || &&
            Ответить
            • про "|| &&" уже ответил: это просто опечатка у меня возникла при наборе... копипастил и не заметил...
              там просто было много конструкций типа:
              !empty($a1) && !empty($a2) && !empty($a3) ||... и так до $a8
              Ответить
            • если нет переменной, то notice
              Ответить
        • 0, пустая строка, false, пустой массив это емпти!!!

          начиная в php 4
          Ответить
      • КО деанонимизировался
        Ответить
    • Чем отличаются if (isset($a)) , if (!empty($a)) и if ($a) ? также if (not_null($a)) от if ($a != 0) ?
      Ответить
      • очень многим, если хотите, расскажу

        if (!empty($a)) от if ($a) не сильно отличается, а вот остальное...
        Ответить
        • isset - даёт true вообще если есть переменная, даже если это будет /index.php?var >> (isset('var')) будет true

          empty($x) == true для:
          "", 0 (0 integer), "0" (0 string), NULL, FALSE, array(), var $var

          единственная разница от $x, это кажется, empty($x) когда $x - это класс без полей и методов в php4 давало false, а в php5 - true.

          not_null и ($a != 0) -- тут по аналогии и так понятно...
          Ответить
    • Спасибо вам Борис огромное за :empty. Никогда не видел интересный пример его практического употребления, моя вина - не искал. Прям разинул рот от удивления. Сколько лишнего 'ternary' в коде! :) Бывает, однако, что мы от мусора не можем избавится. Делаем первую ревизию K.I.S.S. и YAGNI, но заказчик требует добавить/изменить/ дополнить/убрать... и мы делаем это. Потом опять, и опять. В какой-то момент ты осознаёшь что всё надо снести до фундаментa и сделать с начала... но заказчик за такое платить не будет... Потом получается вместо "keep it simple, stupid"... "keep it at least working"...
      Ответить
      • Коллега, кажется у нас с Вами один и тот же заказчик...
        Ответить
      • я было подумал, что один другого благодарит за смайл :empty:
        Ответить

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