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

    +160

    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
    public function isValidModule($module)
        {
            if (!is_string($module)) {
                return false;
            }
    
            $module        = strtolower($module);
            $controllerDir = $this->getControllerDirectory();
            foreach (array_keys($controllerDir) as $moduleName) {
                if ($module == strtolower($moduleName)) {
                    return true;
                }
            }
    
            return false;
        }

    Великий и могучий Zend Framework в очередной раз очаровывает своих адептов изяществом и простотой(((

    Запостил: hacpaka, 21 Апреля 2011

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

    • та брось ) это еще фигня, по сравнению с тем, какие перлы там встречаются )
      Ответить
      • Угу. Фигня. Под руку попалось. Есть конечно и похлеще, но улыбнуло)
        Ответить
    • Зенд весь такой, они там в zf2 переписывают весь ГК,
      инфа от разработчиков
      Ответить
      • Будем ждать новую версию ГК от создателей Зенда.
        Ответить
      • они там в zf2 переписывают весь ГК
        увы, но скорее всего в ГК((((
        Ответить
        • честно, не-ГК не существует. Есть только ГК и УГК.
          Ответить
          • Угу. Третья нормальная форма ГК)))
            Ответить
            • оффтоп: а что значит ваш ник? меня он несколько смущает )
              Ответить
              • оффтоп: Hacu Pakasy и ход ваших мыслей мне не нравится)))
                Ответить
                • а, это вы
                  Рефакторинг проектов любого уровня;
                   копирование функционала; проектирование и разработка CMS; 
                  разработка компонент соц. сетей (в т.ч. перенос модулей SocialEngine 3 на 4);
                   продвижение собственного framework, ориентированного на высоконагруженные системы; 
                  разработка парсеров контента (грабберов).
                  Ответить
                  • Нет. Брат близнец)))
                    Вам нравится зеленый цвет? Или поиск от google?
                    Ответить
                    • видимо, он нравится парсеру говнокода
                      Ответить
                      • зеленый цвет или поиск от google?)))
                        А с чего сударь изволит интересоваться моей персоной, даколи не секрет?
                        Ответить
                        • цвет

                          Все проще. Я не понял, что такое "Hacu Pakasy", думал, гугл подскажет. Гугл подсказал только вот это
                          Ответить
                        • слышал историю, что разработчики ЗФ по ночам вылавливают и уничтожают недовольных
                          Ответить
                  • у вас функцианал разработался

                    насрака, хрен ли тут гуглевать
                    Ответить
                    • О_О ?
                      Ответить
                    • нет, это глисты. ункциональные
                      Ответить
                      • `~~Q `~o '~~~~D
                        Ответить
                        • Сударь, а перестаньте как разбрасывать свои сперматозоиды где попало.
                          Ответить
                    • > насрака
                      вы тоже это увидели!
                      Ответить
                      • Ну круто) Вы, господа, можете присоединиться с многочисленной группе просвящённых людей, которые это заметили) Я не против - чесслово)
                        Ответить
    • Извините, а..... чём данный кусок кода так плох? :)
      Ответить
      • Много писанины... для этого всего достаточно всего лишь одной встроенной функции - glob.
        по мне так достаточно примерно так (только к glob еще и путь к папке передать:
        return is_string($moduleName) && glob(strtolower($moduleName)) !== false;

        на крайняк есть функция поиска в массиве, что проще чем его перебирать
        Ответить
        • glob? А вдруг я под Виндой - может не прокатить... ну это ладно, с тем же успехом можно проверить на is_dir, но мне не кажется что это хороший метод... А по поводу функций поиска в массиве - описался ниже - проблема в регистре, который может отличаться.
          Ответить
      • Ну, для начала, хотя бы тем, что
        foreach (array_keys($controllerDir) as $moduleName) {
                    if ($module == strtolower($moduleName)) {
                        return true;
                    }
                }
        return false;

        тождественно равно
        return array_key_exists($module,  $controllerDir);

        а в контексте задачи и вообще уместным будет:
        return isset($controllerDir[$module]);
        Ответить
        • Первый вариант не прокатит, т.к. не учитывает регистр, а вот второй - то, что надо (хлопаю себя по лбу :)
          Ответить
          • Первый вариант вполне работоспособен, но требует что бы данные приводились к нужному регистру при помещении в массив. Если это не делается, то как вариант - в методе getControllerDirectory() перед возвращением результата делать array_change_key_case.
            Следует отметить что в контексте задачи работоспособны оба варианта, но если ключи могут быть инициализированы значением null и такое значение является в рамках задачи валидным то isset отпадает.
            Ответить
            • Да, можно возвращать из getControllerDirectory() уже данные так как нам удобно :) Тогда вообще этот метод можно будет опустить :) Но оттуда возвращается как есть и, возможно, сделано специально. Что же касается конкретного куска кода - всё вроде ровно :)
              Ответить
              • Но оттуда возвращается как есть и, возможно, сделано специально.
                То есть если нагадили "специально" это не ГК? Я правильно вас понял?
                Ответить
                • Нет, просто возможно, что где-то нужно название модуля с учётом регистра, например, для автозагрузчика, ещё чего. В любом случае, там для всех элементов делать strtolower не сильно оптимально будет.
                  И в любом случае мы с Вами обсуждаем лишь данный метод с конкретным набором входных данных (уж какие есть), а не фреймворк вцелом.
                  Ответить
                  • Даже рассматривая данные метод, следует отметить что единовременное приведение регистра с использованием встроенной функции будет гораздо быстрее форейча за исключением случаев, когда массив огромен а ворейч завершается на первых нескольких итерациях. В данном случае второй вариант маловозможен. Кроме того, ключ в массив загоняется методом addControllerDirectory и может быть абсолютно произвольным в зависимости от степени долбоебизма девелопера. Причем загоняется в массив по одному элементу зараз - так что не мешает сделать приведение к требуемому регистру сразу. А по поводу загрузчика - вы не в теме. Ключ используется именно для сопостовления.
                    Ответить
                    • Оба ваши решения не тождественны коду данного метода.
                      Без контекста - код нормальный и оптимизировать его не получится.
                      Ответить
                      • Я уже писал по этому поводу ниже. Насрать в одном месте. оправдываясь тем, что насрано в другом - плохая методика. Кроме того, по поводу тождественности я хочу еще раз отметить что вариант с array_change_key_case, будет работать быстрее в контексте задачи, если конечно array_change_key_case будет вызываться единожды а не для при каждом вызове функции.
                        Ответить
        • забыл я авторизоваться.
          склероз.
          пост мой.
          И кстати логичнее было бы вместо false в начале и false в конце функции запихнуть все в условия. Получилось бы несколько более гармонично: одно true внутри вложенных блоков условий и false в конце функции если все плохо.
          Ответить
          • Извините, но последний вариант так же не учитывает регистр. Насколько я понимаю, этот метод вызывается так же и при сопоставлении юрла роуту, т. е. модуль потенциально может быть передан в любом регистре, т. е. первоначальная идея - всё привести к нижнему регистру и сравнивать - верна.
            Да, можно применять функции для работы с массивами, чтобы получить все ключи, привести их к нижнему регистру и выполнить in_array, но первоначальный вариант оптимальнее: возможно нам не придётся все модули приводить к нижнему регистру, а вернем true после первой же итерации.
            Ответить
            • Абсолютно верно. Но подобный подход - следствие гавноархитектуры. Класс должен обеспечивать функционал добавления ключей в массив единственным не допускающим разнообразия регистра способом. Перебег не нормализованного массива - непозволительная роскошь.
              Ответить
              • К сожалению, я точно не знаю почему сделано так: недостаток кода, или фича где-то используемая (см. мой комментарий в ветке выше). Давайте не будем спорить об архитектуре: все мы пишем на этом прекрасном фреймворке несмотря ни на что :)
                Что же касается данного метода, который Вы привели, я надеюсь мы с Вами пришли к согласию: в условиях таких входных данных это достаточно оптимальный вариант и в принципе не говнокод :)
                Ответить
                • Давайте не будем спорить об архитектуре: все мы пишем на этом прекрасном фреймворке несмотря ни на что :)
                  Ну почему же. Я не пишу на этом "прекрасном фреймворке" как вы сказали. Однако иногда приходится вляпываться.
                  ли фича где-то используемая
                  Эта фича называется не иначе как говнокод.
                  Что же касается данного метода, который Вы привели, я надеюсь мы с Вами пришли к согласию: в условиях таких входных данных это достаточно оптимальный вариант и в принципе не говнокод :)
                  Именно говнокод. Так получается - говнокод в одном месте плодит тоны говнокода в другом. То что этот говнокод является частью "великого" Зенда - сути не меняет.
                  Если есть желание проверить оптимальность - можете заняться на досуге.
                  Ответить

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