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

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    <?endif?></ul><?endif;?><?endif;?><ul id="gnb-section-help" class="gnb-menu"><?if(isset($group['HelpGroup'])):?>
            <?for($i=0;$i<count($group['HelpGroup']);$i++):?>
            <?$groupItem = $group['HelpGroup'][$i]?>
            <?if(!$groupItem->IsItemList):?>
            <li><a target="_blank" href="<?=$groupItem->Href?>"><?=$groupItem->Content?></a></li>
            <?else:?>
            <li class="gnb-dropdown">
              <a href="#" class="btn gnb-dropdown-toggle-link">
                <?if(isset($groupItem->Content) && $groupItem->Content != ""):?><span class="gnb-dropdown-toggle-text"><?=$groupItem->Content?></span><?endif?></a><a href="#" class="btn gnb-dropdown-toggle"><i>▾</i></a>
              <ul class="gnb-dropdown-menu">
                <?if(isset($groupItem->ItemList)):?>
                <?for($i=0;$i<count($groupItem->ItemList->Item);$i++):?>
                <?$subItem = $groupItem->ItemList->Item[$i]?>
                <li><a target="_blank" href="<?=$subItem->Href?>"><?=$subItem->Content?></a></li>
                <?endfor?>
                <?endif?>
              </ul>
            </li>
            <?endif?>
            <?endfor?>
            <?endif?>
          </ul>

    Встретил в одном из проектов.
    Долго думал к какому языку отнести это дело, решил, что всё же PHP.

    Не пишите так никогда, это как минимум, нечитаемо.

    Запостил: johny, 11 Июля 2014

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

    • А что тут не так, кроме отступов?
      Ответить
      • лапша же
        Ответить
      • <?endfor?>
        <?endif?>
        </ul>
        </li>
        <?endif?>
        <?endfor?>
        <?endif?>
        Ответить
        • Я php не знаю...
          Имелась в виду возможность использовать фигурные скобки?
          Ответить
          • Тут много вариантов, как можно было сделать. Во-первых, вовсе не обязательно окружать XML-скобками каждый оператор. Можно было написать так:
            <?endif;
            endfor;
            endif?>
            Во-вторых, да, можно было использовать фигурные скобки вместо всех этих endXXX. Но это всё мелочи. Самое главное, что здесь слишком часто переключаются режимы PHP/HTML.

            Все эти циклы и ветвления можно было вынести в отдельную функцию, которую принято называть вьюхелпером или декоратором.

            Можно и не всё выносить, а частично:
            <ul id="gnb-section-help" class="gnb-menu">
              <?if(isset($group['HelpGroup'])) {
                for($i=0;$i<count($group['HelpGroup']);$i++) {
                  $groupItem = $group['HelpGroup'][$i];
                    if(!$groupItem->IsItemList) {?>
                    <li><?=Helper1($groupItem)?></li>
                  <?}else{?>
                    <li class="gnb-dropdown">
                      <a href="#" class="btn gnb-dropdown-toggle-link">
                        <?=Helper2($groupItem)?>
                      </a>
                      <a href="#" class="btn gnb-dropdown-toggle"><i>▾</i></a>
                      <ul class="gnb-dropdown-menu">
                          <?=Helper3($groupItem)?>
                      </ul>
                    </li>
                  <?}
                 }
               }?>
            </ul>
            Ответить
          • Это неважно. Это нечитаемо. Мне наплевать, использует человек скобки или end%structure%, но отбить он просто был обязан. Здесь тупо непонятно какой энд к какому стейтменту относится, если бы я редактировал такой код, с вероятностью в 75% я оставил бы закрытие дива не в том стейтменте, а браузер бы привычно проглотил и не заметил.
            Ответить

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