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

    +88

    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
    17. 17
    18. 18
    19. 19
    //До рефакторинга
    static function initConnectOnce(){
        $who = get_called_class();
        if(!$GLOBALS[$who][class_cllct]){
            $db = new DataBase();
            $GLOBALS[$who][class_cllct] = $db->selectCollection(get_called_class());
        }
        return $GLOBALS[$who][class_cllct];
    }
    //После
    public static function initCollectOnce(){
        $who = get_called_class();  
        $cllct = &self::$cacheCollect[$who];
        if(!$cllct){
            $db = new DataBase();
            $cllct = $db->selectCollection($who);
        }
        return $cllct;
    }

    Недавно начал рефакторить свой же код. Нашел такой вот незаметный гавнокод...
    Для тех кто в танке =)
    1. selectCollection(get_called_class()) - зачем вызывать по второму разу, если результат уже есть в переменной $who.
    2. $GLOBALS[$who][class_cllct] - немного глюкнуло наверное, когда писал... Логичнее так $GLOBALS[class_cllct][$who].
    3. initConnectOnce - тут даже наверное не Connect должно быть, а Collect.
    4. Вместо $GLOBALS[$who][class_cllct] лучше(имхо) заюзать статичное свойство для класса.
    5. static function initConnectOnce - забыл public описать....

    Запостил: haker, 11 Февраля 2013

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

    • А вообще у меня весь класс вызывает подобные сомнения =) Я не знаю под какими веществами писал, но код ужасен...
      И очень много моментов для оптимизации..
      Ответить
    • > cllct
      Экономия на спичках гласных буквах, или культ медведя-наркомана Вонни?
      Ответить
      • И то и другое XDDD
        Но на деле хоть какая то экономия (ведь для коротких имен хэш переменной вычисляется быстрее), да и в привычке уже писать такие короткие имена.
        Конечно не в ущерб понятности
        Ответить
        • > (ведь для коротких имен хэш переменной вычисляется быстрее
          Вот и делай вам языки высокого уровня... То кавычки одинарные быстрее работают (миф развеян), то foreach тормозное говно (миф развеян), то хеши от имен переменных быстрее считаются... На сколько наносекунд? ;) Да один SQL запрос сожрет весь эффект от этих микрооптимизаций и не подавится...
          Ответить
          • У меня даже в базе оптимизация XD У меня No SQL решение - MongoDB
            Ответить
            • Не хочу вас огорчать, но NoSQL решение далеко не всегда является оптимизацией по сравнению с проверенной временем реляционной базой данных. И рассчитывать на то, что всё начнёт "летать", если заменить MySQL на MongoDB - как минимум наивно. Сильно зависит от структуры и специфики задач.
              Ответить
              • Да я знаю про эту ситуацию, но в мое случае лучше использовать эту базу.
                Данные разношерстные (а MongoDB ведь больше подходит для этого, нету строгого формата данных).
                Тут даже не замена MySQL на MongoDB, а изначально использовался MongoDB в проекте.
                Ответить
          • Упс, я промахнулся, хотел поставить плюс. Явно нужна возможность переголосовать.
            Не надо выдавать человеку такие секретные дзен-тайны, а то в самом деле перепишет на апострофы и всё заработает быстрее!
            Ответить
            • Главное - верить в это всей душой, искренне и непорочно. Тогда точно +200% скорости получится.
              Ответить
            • > Упс, я промахнулся, хотел поставить плюс.
              Въебал всем по минусу? ;)
              Ответить
    • >haker
      ORURO
      Ответить
    • Как же задобали писать & в присваиваниях объектов. В php 5 объекты ВСЕГДА передаются по ссылке
      Ответить
      • спасибо, посмеялся XDD
        Ответить
        • А вообще "склеивание" переменных с помощью &, имхо, не самый удачный приём. То, что в строке 16 происходит воздействие на элемент cacheCollect'а и так то не особо очевидно, а уж если строчку 13 заныкать подальше и спрятать среди другого кода...
          $cache = array();
          $c = &$cache["test"];
          $c = "foo"; // т.к. $c ссылается на $cache["test"], то $cache["test"] тоже "foo"
          print_r($cache);
          P.S. Вон выше даже guest, который походу шарит в пхп, не понял идею этого кода.
          Ответить

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