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

    +151

    1. 1
    2. 2
    3. 3
    for ($i = 0, $cnt = count($arList); $i < $cnt; $i++) {
    		$arConfig["CONFIG"]["category"]["VALUES"][$arList[$i]] = GetMessage('SALE_DH_RUSSIANPOST_CONFIG_CATEGORY_'.$arList[$i]);
    }

    ... вместо человеческого foreach($arList as $k => $v) { ... }

    Запостил: Iceman, 02 Ноября 2011

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

    • Ничего страшного здесь не вижу, просто чел использует - Цикл со счётчиком
      Ответить
      • Песец, пихпихшники считают этот код нормальным? Похоже, говно в умах.
        Блин, не можешь сделать нормально, ну сделай ты хоть через foreach.
        Ответить
        • Вот и я ж о том же.
          Страшнее всего то, что такие конструкции в коде вообще повсюду, а не на отдельно взятом участке.
          Ответить
        • Орать на лево и на право, что пхп говно запарили честно слово. Вы хоть один аргумент вложите для ясности. Циклы со счетчиками появились еще в бейсике, если я не ошибаюсь. Так в чем же плохость использования его здесь???
          Ответить
          • > на лево
            > на право
            Ответить
          • А смысл делать цикл со счетиком если счётчик не используется?
            1. Лишний вызов count()
            2. Счётчик остаётся в памяти после прохождения цикла.
            Чем это плохо:
            1. При постоянных вызовах лишних функций повсеместно в коде значительно снижается производительность.
            2. Переменная не забирается сборщиком мусора. При использовании foreach() переменные внутри цикла ($key, $value) уничтожаются после прохождения цикла, освобождая память.
            Ответить
            • 1. Относительно того, что чел не использует счетчик - мы не знаем как оформлен массив (конкретно какой тип ключа там используется число или строка). Т.е чел не стал заморачиваться на том какой тип ключа у перебираемого массива, а просто взял цикл со счетчиком где и использует значение счетчика для того, чтобы
              инициализировать массив $arConfig куда записывает строку (видимо ланг ключ или название константы) -
              'SALE_DH_RUSSIANPOST_CONFIG_CATEGORY_'.$ arList[$i]

              2. что значит лишний вызов count? (без него здесь никак, я так думаю что в реализации foreach тоже вшит этот метод) Как Вы видите вызов этой функции находится внутри секции инициализации цикла. Так что данная функция вызовится только раз!

              3. "При использовании foreach() переменные внутри цикла ($key, $value) уничтожаются после прохождения цикла, освобождая память" -
              запустите этот пример и Вы увидите, что не правы! ничего не удаляется (юазайте подход ООП для того, чтобы не захломлять глобальную область видимости переменными):

              <?php

              $aTest = array(
              'first' => array(
              'name' => 'Alex'
              ),
              'second' => array(
              'Petia',
              ),
              );

              foreach($aTest as $sKey => $aValues)
              {
              echo $sKey , '<br />';
              }

              echo '<hr />';
              echo $sKey;
              Ответить
            • Хотя нет видно что ключ у массива имеет числовой формат, но все равно не вижу поблемы в том, что он юзает for вместо foreach. Как говорится - удобно используй
              Ответить
              • А если выше по коду у нас было в массиве 5 элементов с ключами 1,2,3,4,5 соответственно, но по какому-либо стечению обстоятельств (изменение архитектуры) у нас пропадает ключ 4 и появляется ключ 6? Все такие циклы со счётчиками по всему коду вылавливать?
                Насчёт foreach я действительно был неправ, каюсь. Ключ в памяти остаётся. Ман подсказал: Warning! Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
                Ответить
                • Да если поменять значение ключей то будет работать не очень корректно. Я повторюсь цикл со счетчиком нужно юзать там где нужно и мы не знали изначально как там оформлен массив. Я просто до конца верил что чел который написал это, знал для чего он юзает имено этот тип цикла
                  Ответить
                  • В том-то и подстава. Изначально элементов было два. В одной из предыдущих ревизий их было четыре. Вернули к 1 и 2 четвёртый элемент и никак не могли понять - что ж не работает-то ничего. Обработчик и локализация для 4 элемента есть, а оно упорно обрабатывает третий.
                    Использование цикла со счётчиком в условиях первоначальной задачи не является ошибкой. Просто когда писали этот код, никто не задумывался о том, что ключи могут в перспективе изменяться. И если ввести в конфигурационный массив символьный ключ то всё вообще полетит к чёртовой матери. Такие вот дела. Просто good practice.
                    Ответить
    • А я битрикса узнаю по походке
      Ответить
      • его или битриксу?
        Ответить
        • битриКСО
          слово говно — 糞 (くそ, читается как [кусо] или [ксо])
          http://volgoforum.ru/archive/index.php/t-27865.html

          Говно - друг или враг?
          Говно - друг или враг? Умы прогрессивной общественности давно заняты этим вопросом, изучается метафизика говна и пишутся стихи.
          Что думают об этом наши форумчане? Совершенно нелишне будет аргументировать свою позицию.

          Я, например, считаю, что говно в целом дружественная нам субстанция. По крайней мере в физическом смысле.

          1. Это хорошее удобрение.
          2. Из говна делают конфетки. Во всяком случае - пытаются. В любом случае - это творчески развивает личность.
          3. Говно прекрасно плавает. Соответственно, чем больше в вас говна, тем меньше шансов утонуть.
          4. Говно производят абсолютно все люди, что вполне может способствовать их сближению.
          Ответить
      • Он, родимый.
        Ответить
    • > RUSSIANPOST
      Где мои посылки из поднебесной?!
      Ответить
    • показать все, что скрытоvanished
      Ответить

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