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

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    // classes.php
    return [
      'yii\base\Action' => YII2_PATH . '/base/Action.php',
      'yii\base\ActionEvent' => YII2_PATH . '/base/ActionEvent.php',
      'yii\base\ActionFilter' => YII2_PATH . '/base/ActionFilter.php',
      // еще порядка трех сотен классов
    ];

    https://github.com/yiisoft/yii2/blob/d2b864da84a68d56a96709479af78d203f050451/framework/classes.php

    осень 2014, использующий composer модный фреймворк, "requires PHP 5.4 and embraces the best practices and protocols found in modern Web application development", и, конечно, ебаный стыд.

    Запостил: Fike, 18 Января 2015

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

    • > and embraces the best practices
      and embarrasses the best practices

      Опечатались, с кем не бывает...
      Ответить
    • Слава Сатане!
      Ответить
      • Я на твоего Сатану карикатуры рисовал!
        Ответить
        • Не шутите с сатанистами. Как бы нам потом не пришлось "Je Suis inkanus-gray"
          Ответить
      • А я видел, что тут было до редакции.
        Ответить
      • >Слава Сатане!
        Героям Слава!!!
        Ответить
        • Вперде!
          Ответить
          • Это сродни говнокоду
            http://habrahabr.ru/post/248131/
            Ответить
            • Очень ватные комменты там, что и неудивительно для putin's technology social network.

              Зависть к японским фашистам и американским инвестициям с монитора течет.
              Ответить
    • Вопрос!
      Берём yii\base\Action - https://github.com/yiisoft/yii2/blob/master/framework/base/Action.php#L68
      Если я хочу переписать метод, например getUniqueId(), во всём приложении, то как мне это сделать, если не будет:
      Yii::$classMap['yii\base\Action '] = '@app/components/MyAction.php';

      Используя только автозагрузку composer придётся переписывать все участки кода, где используется yii\base\Action, на use app/components/MyAction. Не гибко.
      Ответить
      • Пиздец.
        Ответить
      • если тебе надо переписывать экшен, то это уже пиздец либо с твоей стороны, либо со стороны фреймворка
        Ответить
        • А вообще хуйня такого рода должна быть декларативной. Если слева стоит 'yii\base\Action', то с какого хуя справа стоит что-то другое?
          Ответить
        • Ну ладно с Action. Пусть это будет yii\helpers\ArrayHelper - тут то можно же свой специфический велосипед прикрутить к getValue, например :)

          Насчёт декларативной я согласен.
          Ответить
          • > Пусть это будет yii\helpers\ArrayHelper - тут то можно же свой специфический велосипед прикрутить к getValue, например :)

            1. Это статичный метод, "перебить" класс просто так не получится. Максимум - использовать специфические конструкции типа
            $className = 'yii\helpers\ArrayHelper'; $value = $className::getValue($a, $b);

            Именно из-за этой неподменяемости реализации со статикой нужно быть очень осторожным.
            2. В чем проблема тупо отнаследоваться?
            3.
            class ArrayHelper
            {
            ...
                    if (is_object($array)) {
                        return $array->$key;
                    }


            -_-
            Ответить
      • >>>
        if (!method_exists($this, 'run')) {
            throw new InvalidConfigException(get_class($this) . ' must define a "run()" method.');
        }

        INTERFACE MOTHERFUCKER
        DO YOU KNOW IT?
        Ответить
        • >method_exists($this, 'run')
          >$this
          Тут не интерфейсы нужны, а макдональдс в родном городе автора.
          Ответить
        • run метод может быть реализован с различным количеством обязательных атрибутов. И InlineAction перекрывает вызов method_exists, т.к. ему run код не нужен, он реализует это через call_user_func.
          method_exists тут само то, не?
          Ответить
          • run(array $args = array())
            run(ArgumentsCollection $collection)
            Ответить

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