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

    +155

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    public function throwExceptions($flag = null)
        {
            if ($flag !== null) {
                $this->_throwExceptions = (bool) $flag;
                return $this;
            }
    
            return $this->_throwExceptions;
        }

    Зенд

    Запостил: getme, 11 Августа 2009

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

    • а какой смысл в пятой строке?
      Ответить
    • вообще-то совершенно нормальный код.
      без параметров он возвращает значение свойства
      с параметром - устанавливает значение и возвращает this, чтобы это можно было кидать в середину цепочки вызовов, типа, $object->func()->func2()->throwExceptions(true)->func3();
      Ответить
    • Абсолютно нормальный код. С какого перепуга гавно?
      Ответить
      • а собственно вообще во всем, начнем с того, что $instance->someMethod()->throwExceptions()->anotherMethod() в одном случае работать будет, а в другом - нет, а продолжим тем, что можно было бы написать просто:
        $this_throwExceptions = (bool)$flag;
        return $this;
        Ответить
        • Тут надо, если флаг не null, привести его к булевому выражению и присвоить его throwExceptions.
          Ваш код будет делать присваивание всегда.
          Ответить
          • А этот код и должен делать всегда присваивание. Тут получаеца у нас такая тема, что у метода есть два режима работы (и кстати хорошо, что аргумент он принимает только один... а если было бы несколько).

            Когда я пользуюсь методом thowExceptions, который принимает флаг, то, если я не полный дибил - то понимаю, что собственно этот метод должен или устанавливать кидание эксепшнов, или нет, и возвращать инстанс класа.

            Навешивать на этот метод еще и проверку а возвращаются ли у меня эксепшны - немного неправильная практика, которая увеличит число потенциальных ошибок. Для того, что бы проверить кидаются ли у нас эксепшны, должен быть еще один метод, который зовется, что-то вроде isThrowsExceptions() - который возвращает или true или false. Все.
            Ответить
        • Нет, не в этом смысл.
          В одном варианте он отвечает статус включен ли throwExceptions. В другом - его сеттит, и позваоляет чейнить.
          Можно было сделать два метода, но я так подозреваю, что это было сделано для тогго чтобы не переписывать другие модули, и действительно была запарка.

          Иногда некоторые вещи бонально писать не интересно.
          Ответить
    • oshibka tol'ko v samom konce (nu i konechno v arhitekture metoda), no eto ni kak ne WTF, po zapare mozhno napisat' (prichjom my i ne vidim phpdoc'a - mozhet konechno ego i net, no esli hochesh normal'no videt' object'y, to @return fooBar, zdes' zhe on mog soznatel'no napisat' naprimer mixed)... i Tem bolee ne fakt, chto chel vyshe proverjajet ego naprimer na is_object i na instanceof, koroche imho - ne WTFC... prosto sdat' nado bylo vchera... YURGEN
      Ответить
    • не, код не говно. щас такой прием в пхп получает все большее распространение. в zend framework, например, такого навалом. но имхо, правильнее использовать ява-подход, когда метод принимает и возвращает значения строго определенного типа. короче, надо, чтобы метод throwExceptions($flag) принимал всегда boolean и возвращал всегда $this, и добавить метод isThrowsExceptions(), возвращающий boolean.
      Ответить
      • в яве метод, вызванный с параметрами, и без определяются отдельно
        Ответить
    • все правильно, я за строгую типизацию
      здесь код не однозначен, чем и плох
      Ответить
    • Не гавнокод. Например, такой подход принят в jQuery - когда функция без параметров - это геттер, а с параметром - сеттер.
      Работать так вообще-то удобно.
      Ответить
    • в msdn достаточно функций, которые при абсолютно одинаковых параметрах совершают при первом вызове - настройку параметров, при повторном - действие.
      тем, кому чужд такой подход - надо всегда видеть 10000 строк кода в каждом пустяковом файле?
      Необходимо всего лишь знать API
      Ответить

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