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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
<?php
// Код курильщика
   for ($i=1;$i<8;$i+=2){
   if($i==$row->ShipingTime) $result .="<option selected value='".$i."'>".$i."</option>";
   else $result .="<option value='".$i."'>".$i."</option>";

    if($i==7) {$i+=3;
     if($i==$row->ShipingTime) $result .="<option selected value='".$i."'>".$i."</option>";
     else $result .="<option value='".$i."'>".$i."</option>";
    }
    else {
     if($i==10) {
      $i+=4;
      if($i==$row->ShipingTime) $result .="<option selected value='".$i."'>".$i."</option>";
      else $result .="<option value='".$i."'>".$i."</option>";
     }
     else {
      for ($i=20;$i<45;$i+=10){
       if($i==$row->ShipingTime) $result .="<option selected value='".$i."'>".$i."</option>";
       else $result .="<option value='".$i."'>".$i."</option>";
       if($i==40){$i+=20;
        if($i==$row->ShipingTime) $result .="<option selected value='".$i."'>".$i."</option>";
        else $result .="<option value='".$i."'>".$i."</option>";
        $i+=30;
        if($i==$row->ShipingTime) $result .="<option selected value='".$i."'>".$i."</option>";
        else $result .="<option value='".$i."'>".$i."</option>";
       }
     }
    }
   }


// Код здорового человека (провели рефакторинг)
$ST_variants = array('1', '3', '5', '7', '10', '14', '20', '30' , '40', '60', '90');
foreach ($ST_variants as $value) {
  print "<option ". ($value==$row->ShipingTime) ? 'selected' : '' ; ." value='".$value."'>".$value."</option>";
}

Заказчик хотел получить <select> со списком значений: '1', '3', '5', '7', '10', '14', '20', '30' , '40', '60', '90'...

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

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

  • здоровый человек называет переменные ST_variants? не знает printf/sprintf? ну приехали лол.
    Ответить
    • > не знает printf/sprintf
      Да нафиг тут спринтф? С интерполяцией наглядней будет, чем с ним:
      $ST_variants = array('1', '3', '5', '7', '10', '14', '20', '30' , '40', '60', '90');
      foreach ($ST_variants as $variant) {
          $selected = $variant == $row->ShippingTime ? 'selected ' : '';
          print "<option $selected $variant>$variant</option>";
      }
      Ответить
      • Оно конечно не запрещено, но рано или поздно все равно разбивается о необходимость чего-то более серьезного. Ну и лично меня умиляет вычисление значений не в предварительных переменных, а прямо в аргументах функции.
        Ответить
        • > чего-то более серьезного
          Да так то можно хоть обобщённый компонент для комбиков написать. Но надо ли это в этой задаче?
          Ответить
    • 'selected' : '' ; ." value='"


      рефакторинг-то хоть запускался вообще?
      Ответить
  • Не знаю, как там у вас в ПХП, но так, в общем случае, будет в два раза меньше проверок:
    function select(selected) {
        var options = [1, 3, 5, 7, 10, 14, 20, 30 , 40, 60, 90],
            result = options.map(function (x) {
                return "<option value=\"" + x + "\">" + x + "</option>";
            }),
            index = options.indexOf(selected);
        result[index] = result[index].replace(" ", " selected ");
        return result.join("\n");
    }
    Ответить
    • > в два раза меньше проверок
      Зато в два раза больше кода и раза в два больше мусора в куче :3

      P.S. И да, оригинальный код толерантен к кривому или пустому $row->ShippingTime.
      Ответить
      • OK, можно result[index].replace(" ", " selected "); заменить на String(result[index]).replace(" ", " selected ");
        На счет памяти - хз. Может можно придумать какой-то способ похожий на with-output-to-string, какой-нибудь ob_buffer_start или как-оно там.
        Ответить
  • А я всё равно буду курить и бухать. Хоть здоровым не помру.
    Ответить
  • вывод html тегов таким способом не очень кошерен, так что второй вариант тоже курильщика
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8