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

    +153

    1. 1
    2. 2
    3. 3
    if (5 < strlen($method) && '_init' === substr($method, 0, 5)){
        $this->_classResources[strtolower(substr($method, 5))] = $method;
    }

    ZendFramework (c)

    Запостил: Bydlo, 21 Декабря 2010

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

    • шо, и #5000 зафейлили?
      Ответить
    • А в чём заключён говнокод?
      Ответить
    • показать все, что скрытоBydlo, иди еби собак
      Ответить
    • "Метод - как строка, и строка как метод", - искренне Ваш PHP
      Ответить
      • >Метод - как строка, и строка как метод
        ну это реализуемо и в статических языках, например в жабке.
        Ответить
        • '_init' === substr($method, 0, 5)
          вот это ещё понравилось...
          Ответить
          • На _init провериться хочешь ты.
            Ответить
            • и в чем проблема? я тоже всегда ставлю строку перед сравниваевым значением - это помогает избежать присваивания в условии
              Ответить
              • здесь чуть-чуть другое.
                Коментом ниже правильно замечено, что вместо === хватило бы и ==
                так как:
                во-первых '_init' стоит вначале, что намекает на молчаливом преобразовании сравниваемого значения к строковому типу;
                во-вторых substr так и так возвращает строку
                Ответить
                • Коммент ниже мой :) Int имел ввиду, что слева в сравнении стоит строковой литерал, что на первый взгляд может показаться нелогичным, а я объяснил из каких соображений это делают. На самом деле, в приведённом примере это неважно, так как сравнивается с функцией и ошибка присваивания в любом случае будет видна (если она будет). Скорее всего, автор поместил строковой литерал слева чтобы поддерживать целостность своего кода, так как видимо он во всех сравнениях помещает литералы слева. Ну а строгое сравнение с проверкой типа здесь, конечно же, не нужно.
                  Ответить
                  • Лично мне такие условия сложно в голове преобразовывать, особенно if (2 < $a), лично я не сразу в голове преобразовываю в "а больше двух", приходится лишнее действие делать
                    Ответить
                    • поначалу мне тоже было сложно воспринимать, а сейчас нормально читаю, это лишь вопрос практики.
                      Ответить
                • И, собственно, я удивлён, что из всего говнокода ZF был выбран только этот кусочек, в котором говнокода практически и нет :-D
                  Ответить
              • присваивания или кошмарного оператора => :)
                Ответить
          • здесь достаточно было бы обычного сравнения (==) без проверки типа
            Ответить
        • вот единственное, что мне нравится в пыхе, так это возможность написать
          $object->$method()
          а в той же жабке пришлось бы рефлекшн юзать
          Ответить
    • vanished
      Ответить

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