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

    +1

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    <?
    namespace components\max;
    class articles_element
    {
        static function run($_arParams)
        {
            $arParams = &$_arParams['PARAMS'];
            $tm = &$_arParams['tm'];
    
            $user = &$tm->user;
            $code = $arParams['CODE'];
    
            $arCache = array(
                'prefix' => 'show',
                'sufix' => $code,
                'time' => -1,
                'lang' => LANGUAGE_ID,
            );
    
            $tm->loadLang('show');
    
            $arSelect = array(
                'E.id',
                'E.active',
                'rel',
                'time',
                'code',
                'date_active_from',
                'title_'.LANGUAGE_ID.' AS title' => $tm->conf['LANG_FALLBACKS'][LANGUAGE_ID],
                'content_'.LANGUAGE_ID.' AS content' => $tm->conf['LANG_FALLBACKS'][LANGUAGE_ID],
                'author_id',
    
                'only_for_auth_users',
    
                'source_url',
                'source_author',
                'source_date',
            );
    
            $arJoin = [];
    
            if($tm->conf['show']['show_additional'])
            {
                $arSelect[] = 'GROUP_CONCAT(show2category.category_id) AS categories';
                $arJoin[\CShow2Category::$table.' show2category ON E.id = show2category.show_id'] = 'LEFT';     
            }
    
            $arFilter = array('E.code' => $code, 'E.site_id' => $tm->conf['site_id']);
    
            $dbShow = \CShow::GetList(false, $arFilter, ['E.id'], array('nTopCount' => 1), $arSelect, $arJoin);
            while($arShow = mysql_fetch_assoc($dbShow))
            {
                $arShow['title'] = htmlspecialchars($arShow['title']);
    
                if(!empty($arShow['categories']))
                {
                    $arShow['categories'] = explode(',', $arShow['categories']);            
                }
    
                $arShow['time_write'] = date("d.m.Y", $arShow['date_active_from']);
                $arShow['only_for_auth_users'] = $arResult['only_for_auth_users'] && empty($tm->user['id']);            
    
                $arResult = $arShow;
    
                if($arResult['only_for_auth_users'])
                {
                    $arResult['title'] = GetMessage('ERROR_ONLY_AUTH');                
                }
    
                $tm->setLastModifiedTime($arShow['date_active_from']);
    
                $tm->setBuffered('title', $arResult['title'].' | '.GetMessage('sitename'));
                $tm->setBuffered('h1', $arResult['title']);
            }
    
            if(empty($arResult))
            {
                // Проверяем редиректы
                $arParamsRedirects = array(
                    'code' => $arFilter['code'], 
                    'module' => 'show',
                );                
                $tm->redirects_modules($arParamsRedirects);
    
                $tm->pagenotfound();
            }
    
            $arResult['user_status'] = $user['sts'];
    
            if($tm->conf['show']['show_additional'] && !empty($arResult['categories']))
            {
                $arFilter = [
                    'active' => 1,
                    'show2category.category_id' => $arResult['categories'],
                    '!E.id' => $arResult['id'], 
                ];
                $arSelect = [
                    'E.id',
                    'code',
                    'title_'.LANGUAGE_ID.' AS title' => $tm->conf['LANG_FALLBACKS'][LANGUAGE_ID],

    Код от противника фреймворков (это контроллер). Цитата виновника торжества:
    "У меня роутинга нету За роутинг отвечает nginx (ранее отвечал .htaccess)"

    Запостил: loki90, 26 Апреля 2016

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

    • полубитрикс
      Ответить
      • Полуговно все равно говно
        Ответить
        • Вспомнил художественный фильм «Председатель»:
          — Как навоз?
          — Навоз — дерьмо!
          — Почему дерьмо?
          — Потому что дерьма мало, сплошная солома.
          Ответить
    • Да это же PHP... Для него это нормально...
      Не, ну правда, сам язык провоцирует говно писать.
      Ответить
    • Тополиный пух
      Автор петух
      Ответить
    • Та нормальный код.
      Ответить
    • Это мой код.
      За него мне не стыдно.
      Тут представлен не весь код, а "выдержка", некоторые куски могут показаться лишними.
      Этот код писался с 2009 года.
      В коде на Битриксе ничего плохого не вижу.
      Некоторым людям фреймворки голову затуманили, что самостоятельно думать не в состоянии.
      Роутинг исторически с 2008 года в .htaccess
      Он справляется со всеми задачами, поэтому писать роутинг на пхп ради того, чтобы меня не критиковало быдло, не собираюсь.
      Меньше кода, все довольны.

      Олени просто не в состоянии оценить всю красоту игры. У них шаблонное мышление.
      Вот сама статья о фреймворках:
      http://blog.kpitv.net/article/frameworks-1/
      Ответить
      • >mysql_fetch_assoc($dbShow)
        ссаными тряпками из профессии.
        Ответить
        • Мой код 2009 года :)
          В PHP7 mysql_ функции удалены.
          Сейчас такие вызовы mysql_ - просто обертка, которая равно или поздно будет удалена, а может и не будет.
          Ответить
          • >Мой код 2009 года :)
            А есть Ваш Код 2016 года строк 100.
            Ответить
            • Вы хотите, чтобы я его выложил сюда? :)
              Ответить
              • Выкладывайте, тут ему и место.
                Ответить
                • Сначала дайте ссылки на свой говнокод. :)
                  Ответить
              • можно и ссылку
                Ответить
                • Не 2016 год, но и не 2009.
                  Какой точно, не скажу.
                  http://blog.kpitv.net/article/how-to-set-title/

                  А Вы стисняетесь выложить? :)
                  Ответить
                  • как всегда костыльно-ориентированный говнокод, не удивительно
                    Ответить
                  • class TM
                    {
                    function TM()
                    ........
                    Вон из профессии. Признай программирование это не твоё.
                    Ответить
                    • Зачем же так? Вдруг код писался в расчёте на совместимость с PHP 4?
                      Ответить
                      • >Не 2016 год, но и не 2009.
                        Какой такой PHP 4. в 2009 уже вышел 5.3 Даже если он писался в 2009, он уже должен был иметь
                        __construct
                        Ответить
                        • Сейчас там феншуйный __construct - из-за совместимости с PHP7.
                          Тот класс был написан как я только начинал программировать.
                          Работает - не трогал. :)
                          Ответить
                          • Ты еблан? Так и показать нужно было код с " > феншуйным __construct"
                            Пока эта портянка похожа на кусок говна.
                            Ответить
                            • Ты пока вообще ничего не показал. :)

                              Что было опубликовано, на то и дал ссылку.
                              Поддерживать актуальность кода в статье смысла не вижу.
                              Ответить
                          • function insertBufferedContent(&$data)
                            {
                            if(!empty($this->buffered))
                            {
                            foreach($this->buffered as $contentID => $contentData)
                            {
                            $search[] = ' <!--'.$contentID.'--> ';
                            }

                            $data = str_replace($search, $this->buffered, $data);
                            }
                            }

                            короче я больше не хочу на это смотреть тут все настолько плохо, что хочется напиться.
                            Ответить
                            • А что не так? :)
                              Ответить
                              • 1. $this->buffered может быть не итерируемым, ты проверяешь на его не пустоту но чем он занят не проверяешь.

                                2. у тебя метод вместо того что бы вернуть значение нормальным ожидаемым способом, возвращает его через аргументы, хотя нормальному поведению ничего не мешает.
                                Ответить
                                • 1. Это внутренняя "переменная", там всегда массив. Если бы там могло быть что-то другое, проверял бы. :)

                                  2. Да, не совсем очевидно. Просто зачем лишние операции копирования в памяти. :)
                                  Ответить
                                  • >проверял бы, просто ....
                                    Это все отмазки пэтеушников.
                                    >лишние операции копирования в памяти
                                    о да еще не знаем как php работает c памятью
                                    Ну, я то скажу мне все ясно.
                                    Ответить
                                    • Расскажите об этом PHP-шным функциям, например sort
                                      :)
                                      Ответить
          • Ну харош пиздеть,
            $arJoin = [];
            какой нахрен 2009?
            Ответить
            • Читай внимательно:
              "Этот код писался с 2009 года."

              http://govnokod.ru/19878#comment323654
              Ответить
      • у метода GetList то же самое точь в точь. http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php
        Ответить
        • У меня на 1 параметр больше. :)
          Я в то время работал с Битриксом и мне такой подход понравился. Что-то менять, чтобы только путало, смысла не видел.
          Код, написанный на моей самописи будет понятен всем битриксоидам.
          Ответить
      • >Почему я не использую в личных проектах фреймворки
        Потому что #нисосилил.
        Ответить
        • Потому что я их использую на работе!
          Читай статью.
          Ответить
          • Любой человек который использует фреймворк переносит решения из него в свой без фреймворочный код.
            То, что я вижу тут это говнище воняющее хуже Битрикса. А теперь вопрос с какими фреймворками Вы работали?
            Ответить
            • Так во фреймворках сплошные недостатки, что мне оттуда переносить? :)
              Ну нету в PHP нормальных оберток для sql. Я в этом не виноват.
              Во всемя написания АПИ работал с Битриксом, году так в 2011.
              Перенял только позитивные моменты.
              Этот код будет понятен всем битриксоидам.
              Ответить
      • Бегом изучать Zend Framework и Symfony. Когда изучите, возвращайтесь.
        Ответить
        • Бегом читать статью! :)
          Ответить
          • Какую?
            Ответить
            • http://blog.kpitv.net/article/frameworks-1/
              Ответить
              • Заметка слишком несерьёзна, чтобы называться статьёй. Это скорее слёзы...

                Если хотите, можем разобрать по пунктам:

                • Cвоеобразное извращенное понимание МВЦ.
                У MVC вообще много интерпретаций. Если есть претензия к тому, как реализована схема MVC в конкретном фреймворке, напишите подробнее.

                • Нету настроек для конкретной страницы.
                Поясните свою мысль.

                • Чрезмерная сложность, много дырявых абстракций.
                Да, абстракции иногда затрудняют отслеживание пути перемещения данных. Но то же самое можно сказать про любой распухший код. Чрезмерно просты только одностраничники и статические сайты.

                • Плохая документация.
                Обобщения не нужны. Бывают хорошо документированные фреймворки. А бывает и самописный код вообще без документации.

                • Сложный дебаг, сложный аудит. Например нужно получить результирующий SQL-запрос.
                Та же проблема бывает и без фреймворков. Получить результирующий SQL-запрос всегда можно, если очень нужно.

                • Быстродейтсвие и потребление памяти.
                Это проблема любого плохого кода. Есть примеры, что удалось сэкономить, отказавшись от фреймворка?
                Ответить
                • Про МВЦ и настройки для конкретной страницы расписано в статье ниже списка недостатков.
                  В моей самописи нету распухания кода и дебаг простой.

                  Самописный код в большинстве случаев вообще без документации. :)
                  Но он свой. Нету нужны рыться в неполной документации фреймворка.

                  Примеров, что удалось сэкономить нету, так как не приходилось переписывать код с фреймворка на самопись.
                  Но моя самопись генерируется до 5мс.
                  Ответить
                  • > Самописный код в большинстве случаев вообще без документации. :)

                    Выходит, что код одноразовый. Без первого автора его никто не сможет дорабатывать. Отличный способ стать незаменимым!
                    Ответить
                    • скорее способ быть уволенным к хуям за нечитабельное кривое гавно и переквалифицироваться в дворники
                      Ответить
                    • 1. Я пишу самопись только для себя
                      2. О документации думаю, часть функционала документирована
                      3. Приходилось работать в студии с самописной ЦМС. Ничего страшного, выучил за ИС
                      Ответить
                • Зачем мне изучать молоток, если я прекрасно забиваю гвозди головой?
                  Ответить
                  • А фреймворкостоители забивают гвозди кувалдой :)
                    И своей головой они думать не в состоянии.
                    Ответить
              • (продолжение)

                • Неудобно создавать статические страницы.
                Поясните, с какими трудностями пришлось столкнуться.

                • Непонятные и лишние обертки для SQL.
                Никто не заставляет их использовать. Можно и без фреймворков обложиться ORM, и с фреймворками писать запросы вручную.

                • Плохо работает многосайтовость из коробки.
                Поясните.

                • Отстутствие нужных фич, которые можно легко реализовать в самописи.
                Нужны примеры.

                • Нету нормальных готовых компонентов, например меню. Меню каждый обязан написать сам. :)
                Меню есть. Хотя для сложных сайтов уж лучше реализовать его самому.

                • Нету добавления хлебных крошек.
                Смотря в каком фреймворке.

                • При выпуске новых версий как правило отсутствует обратная совместимость. Программисты на фреймворках никогда не останутся без работы.
                Есть такое. Но никто не заставляет переходить с одной несовместимой ветки на другую. У выпусков PHP тоже иногда возникает несовместимость.

                • У добавленных цсс/жс файлов нету признака, что файл изменился.
                Поясните свою мысль.

                • Чтобы обратиться к GET/POST/COOKIE/SERVER нужно использовать непойми зачем неудобные обертки.
                Зачастую возможность обращаться без обёртки сохраняется.
                Ответить
                • >Поясните, с какими трудностями пришлось столкнуться.

                  Построение меню, иерархия папок, администрирование, доступность страниц по лишним адресам. Профессионалы-аутсорсеры такого понаделывали, что это ужас.

                  >SQL

                  ОРМ - тяжелая вещь. Но и не писать же рутинные SQL-запросы вручную. А обертки написаны глупо.
                  Поэтому проще самому написать нормальную обертку.

                  >Поясните. (многосайтовость)

                  Она как бы в "ядре" не предусмотрена. Реализация возложена на программиста.

                  >Нужны примеры. (нужных фич)

                  Например, отдача 304 ответа, языки-фоллбеки для переводов определенного языка, та же дописка даты модификации файла у ресурсов.

                  >Меню есть. Хотя для сложных сайтов уж лучше реализовать его самому.

                  Я прежде всего о построении самого массива меню, а не о выводе.

                  > Есть такое. Но никто не заставляет переходить с одной несовместимой ветки на другую. У выпусков PHP тоже иногда возникает несовместимость.

                  Поэтому проще владеть своим кодом.
                  У меня проблем с версиями php почти не было. Код легко пересел с 5.2 на 7.0

                  >Поясните свою мысль. (CSS/JS)

                  Изменился цсс/жс, а браузер продолжает использовать закешированную версию. Приходится устанавливать малое время кеширования.

                  >Зачастую возможность обращаться без обёртки сохраняется.

                  Да, это мелкий недостадок, который и не тянет на недостаток.
                  Ответить
                  • /style.css?v=666 и заебись
                    и для этого есть вещи кстати http://symfony.com/doc/current/components/templating/helpers/assetshelper.html#versioning
                    Ответить
                    • >/style.css?v=666 и заебись

                      А если код подключения раскидали по 100500 файлам?

                      >и для этого есть вещи кстати http://symfony.com/doc/current/components/templating/helpers/assetshelper.html#versioning

                      Проблему как бы решает, но:
                      1. Очищается кеш всех файлов.
                      2. Нужно кодить.
                      3. Нужно лезть в код при изменениях, а у меня все меняется автоматом.
                      Ответить
                      • конечно, будем каждый раз дергать файловую систему в надежде, что один из трехсот файлов изменился, хотя многое стоило бы склеить в один
                        Ответить
                        • У Вас триста файлов ресурсов?
                          Ооо. :)

                          А че это Вы так быстродействием озадачились?

                          1. По сравнению с оверхедом фреймворка оверхед минимальный.
                          2. filemtime кешируется.
                          3. У меня filemtime выполняется за время равное 1.9073486328125E-6 с.
                          4. Купите себе ssd.

                          Склейка не производится по причине того, что:
                          а) разделение ролей пользователей
                          б) 1 лишний файл погоды не делает
                          в) на разных страницах могут подключаться разные файлы
                          г) зачем мобильному пользователю отдавать кучу хлама, который ему не нужен
                          д) для этого нужен галп, что подразумевает программирование, а я ленивый программист
                          э) для этого нужен галп, а я до недавнего времени сидел на шаред хостинге
                          Ответить
                          • я не быстродействием озадачиваюсь, а вашим извращенным понятием о том, как надо делать сайты.
                            >Изменился цсс/жс, а браузер продолжает использовать закешированную версию. Приходится устанавливать малое время кеширования.
                            короче похуй на то, что файл не менялся, а ресурсы веб-сервера на его отдачу тратятся?
                            с таким подходом и знаниями дальше говносайтов на говноядре уйти трудно будет. Хотя не стоит пытаться - нужно же чьи-то говнокоды сюда добавлять
                            Ответить
                            • Какие ресурсы?
                              1.9073486328125E-6 с?
                              Вы серьезно?
                              Экономия на спичках?

                              Ну да, лучше вообще не кешировать ресурсы, как и поступают в основном фреймворкостроители. Или отдают устаревшие файлы.
                              Ответить
                              • а, да, забыл, на ваших говносайтах кешировать нечего, да и следить не за чем
                                Ответить
                      • > А если код подключения раскидали по 100500 файлам?

                        Откройте для себя BundlePhu.
                        Ответить
                        • Так он же проверяет filemtime, loki90 негодует.
                          Как такое только могли написать на фреймворке.
                          :)
                          Ответить
                          • он проверяет 1 раз. Изменилось что-то - меняем версию скрипта/стиля, браузер обновляет. А смыла "Изменился цсс/жс, а браузер продолжает использовать закешированную версию. Приходится устанавливать малое время кеширования." - никакого
                            Ответить
                            • Ооо.
                              А как он знает, что что-то изменилось без filemtime? :)

                              Почитайте исходники что ли...
                              Ответить
                              • почитал ) а кто говорит что его на каждом запросе нужно запускать?
                                Ответить
                                • У меня може может не на каждом запросе проверяется время модификации.

                                  Все, я больше не хочу спорить за 1.9073486328125E-6 с, а может и меньше, это погрешность измерения.

                                  У вас квашеная капуста в голове, используете фреймворки с жутким оверхедом, а прицепились до погрешности измерения.

                                  Не используйте фреймворки, раз так дорожите микросекундой.

                                  :)
                                  Ответить
                  • >>ОРМ - тяжелая вещь. Но и не писать же рутинные SQL-запросы вручную. А >>обертки написаны глупо.
                    >>Поэтому проще самому написать нормальную обертку.

                    конечно, причем лучше писать ее под каждый проект заново

                    Кстати, функции для работы с массивами тоже тяжеловаты и не всегда нужны
                    потому я всегда сам пишу qsort, для каждого проекта с ноля
                    Ответить
                    • Только олени, как этот анонимный комментатор, все пишут с нуля под новый проект.

                      Кстати о функциях для массивов.
                      Адепты ООП нервно курят в сторонке, так как для объектов нет таких функций.
                      Ответить
                      • ну конечно же ты пишешь не с ноля

                        у тебя есть свой файлик mylib.php, который ты во всех проекты копируешь по FTP
                        Ответить
                        • Олень, авторизируйся и не суди других по себе :)
                          Ответить
                      • вообще то в объектах есть итераторы, то есть представление свойств бъекта в виде массива, ну и сортировка работает
                        Ответить
                  • > Поэтому проще самому написать нормальную обертку.
                    А потом такие - "Ой, а почему у меня тут какие-то MySQL Error??? Ой, а почему главная страница открывается полчаса??? Ой, а что делать, если функциональности моего велосипедика не хватает??? Ой, а чего это мой уютный сайтик взломали???" и т. д.
                    А через пару недель бессонного дебага: "Ой, лучше бы я использовал проверенные и надёжные решения..."
                    Ответить
                    • Ну шо ты мелешь?
                      На тебе sql-инъекцию на фреймворке:
                      http://govnokod.ru/13993
                      Ответить
                      • Там у where условие, склеенное вручную. А есть ли возможность не клеить условие вручную, а использовать подстановку параметров?

                        В документации по Yii1 я увидел, что вторым аргументом where() может идти $params с массивом параметров:
                        http://www.yiiframework.com/doc/api/1.1/CDbCommand#where()-detail
                        Однако, как его использовать, в примерах не указано.

                        В документации Yii2 у where() появляется третий вариант аргумента $condition, содержащий ассоциативный массив колонка=>значение:
                        http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail
                        Условия свяжутся друг с другом оператором AND.

                        Лень сейчас читать исходники Yii, поэтому спрошу:
                        1. Как воспользоваться обещанной подстановкой параметров в Yii1?
                        2. Экранируются ли подставленные значения?
                        Ответить
                      • хехехе, у пхпшников даже во фреймворках есть SQL инъекции (и, наверняка, XSS)
                        Ответить
                      • История про то, что пилораму можно сломать, засунув в нее рельс?
                        Ответить
                        • Скорее про то, что пилорама вынуждает сувать в неё лом (аккуратно). Инканус вон комментом выше открыл доку и не разобрался, как туда правильно передать параметр.
                          Ответить
                          • Влом ссылки открывать, не хочу себе аппетит портить.
                            Ответить
                          • Пришлось лезть в исходники Yii. В Yii1 откопал такой фрагмент:
                            public function where($conditions, $params=array())
                            	{
                            		$this->_query['where']=$this->processConditions($conditions);
                            		foreach($params as $name=>$value)
                            			$this->params[$name]=$value;
                            		return $this;
                            	}

                            А самая интересная функция описана тут:
                            https://github.com/yiisoft/yii/blob/master/framework/db/CDbCommand.php#L1511

                            Комментарии в коде отсутствуют, а комментарии для докгена (или что там используется) не помогают. Надо разбирать весь код функции processConditions, чтобы понять, как она работает.
                            Ответить
                            • P.S. А нет, в документации про первый параметр ($conditions) всё написано: это либо строка (которая передаётся во WHERE как есть, со всеми инъекциями), либо массив безумного формата вроде array('and', 'id=1', 'id=2').

                              Из исходника ясно, что функция processConditions тупо превращает array('and', 'id=1', 'id=2') в строку '(id=1) AND (id=2)'.

                              Никакого экранирования. Условие 'id=1' нужно клеить самому, так что все инъекции будут протащены.

                              Второй же параметр ($params) вообще не нужен. Он сохраняет перечисленные параметры в объекте и потом никак их не использует.
                              Ответить
                              • Привет!

                                Это делается так:

                                $cmd->where([
                                'condition' => 'smth.id = :id',
                                'params' => [
                                'id' => 1,
                                ]
                                ])

                                Либо так

                                Smth::model()->findByAttributes([
                                'id' => 1
                                ]);

                                В Yii2 сделали это дело немного комфортнее, но разница минимальна.
                                Ответить
                      • Вывод: лучше бы у Yii документации не было совсем, потому что всё равно нужно в исходниках копаться. И лучше бы у Yii не было класса для работы с базой.

                        Ну хоть что-нибудь хорошее в Yii есть?
                        Ответить
                        • луче бы Yii не было совсем
                          равно как и пхп и джс
                          Ответить
    • В общем не взирая на упоротость автора.
      От этого кода хочется взять и уебать, автора. Потом еще раз и еще раз.
      Но ГК он же обучающий, поэтому я поясню свою мысль.
      1. 3 различных вида кодо стайла. ( GetMessage, $tm->setLastModifiedTime, $tm->redirects_modules )
      2. mysql_fetch_assoc($dbShow)
      3. <?

      Вывод: Ебашить пока говно заменяющее мозг не вылезет.
      Ответить
      • 1. Код написан в разное время :) Согласен, что это плохо. Но в самом попапэ тоже нету единого кодстайла... :)
        2. Уже сказал выше.
        3. Ничего страшного в этом не вижу. Код пишу для себя. Если кто не может настроить себе short_open_tag - то вы ССЗБ.
        Ответить
        • Сделайте, пожалуйста, так, чтобы код "для себя" не покидал пределы вашей машины.
          Ответить
          • Просто тут в чате попросили выложить:
            https://gitter.im/dev-ua/php
            Можете присоединиться к ообсуждению
            :)
            Ответить
            • А что обсуждать оттенки говна?
              Код говно и обсуждать в нем нечего. В нем нет интересных решений.
              Ответить
              • Так в чате обсуждали изначально не код, а статью, на которую я выше давал ссылку.
                У фреймворкостроителей начался лютый батхерт. :)
                Ответить
                • Расскажите как может возникнуть бархет от слов, статей ниосилятора?
                  http://blog.kpitv.net/article/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0% B1%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D0%BE%D 1%81%D1%82%D1%8C-web-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0% BE%D0%B2-15343/

                  >Шардинг БД, репликация БД. Фреймворками не решается.
                  вот пример вашего ниосиляторства.
                  Ответить
                  • В чате к этим словам возражений не было...
                    Ответить
                    • Мне фиолетово, что было в чате и чего не было. Я привел пример "ниосиляторства". Вся ваша проблема от того, что программирование это не Ваше оставьте его.
                      Ответить
                      • Пустой чес. :)
                        Как же с репликациями и шардингом помагает фреймворк?
                        Ответить
                        • очевидно, нормальный ORM хендлит раундробины к БД и CDN, но в пыхе таких нет
                          Ответить
        • Но в самом попапэ тоже нету единого кодстайла... :)
          Но есть стандарт оформления кода php http://svyatoslav.biz/misc/psr_translation/
          И его необходимо придерживаться
          Ответить
          • код стайл от святослава
            необходимо придерживаться

            окей
            Ответить
            • Кодстайл от PHP Framework Interop Group, переведённый Святославом.
              Ответить
      • А ничо, что в самом PHP функции как попало названы?
        Ответить
    • Здорово! я тоже не понимаю этих нопыщенных "кодеров" которые только и могут что лоравель использовать. Думать сами не могут, ООП какой-то ненужный и медленный. Вот этот код - понятный! Хотя бы. Хочется на фреймворк посматерть
      Ответить
      • >>ООП какой-то ненужный и медленный.

        да, мои программы на пхп тормозят. Денис Попов говорит это потому что я использовал ооп.
        Перепишу без ооп и будут летать
        Ответить

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