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

    +160

    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
    20. 20
    21. 21
    /**
    * @param array $input
    * @return array
    * @throws Exception
    */
    protected function makeParams($input)
    {
        if (!is_array($input))
        {
            throw new \Exception('argument should be array');
        }
    
        $params = array();
    
        foreach ($input as $k=>$v)
        {
            $params[] = $v;
        }
    
        return $params;
    }

    свой array_values, с блекджеком и экзепшенами

    Запостил: heyzea1, 21 Ноября 2014

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

    • В пыхе же есть возможность недостатической недопроверки аргумента (makeParams(array $input)), зачем же вручную?

      И зачем из массива в массив перекладывать? Или есть шанс что is_array вернет true для чего-то что не массив на самом деле?
      Ответить
    • вангую автор до этого писал на Java :D
      Ответить
    • А самое смешное, то, как это используется.
      При нажатии на сабмит JS собирает JSON из значений формы в определенном порядке, отправляет на веб-сервер. Веб-сервер это дело валидирует, затем с помощью makeParams собирает JSON из значений и через jsonrpc кидает на сервак с бизнес-логикой.
      Так вот, если собрать не в том порядке, или забыть какое значение \ добавить лишнее, то сервак выкидывает экзепшен.
      Ответить
      • Да это ж SOA/ESB! А сервак с бизнес-логикой направляет это на сервак с базой данных, верно?
        Ответить
        • Так и есть, все так. Теперь ещё и как это правильно называется буду знать.
          Вообще я жаловался на реализацию, а не архитектуру, архитектура как раз для проекта выбрана удачно.
          Ответить
          • На самом деле есб тут ни причём. И соа тоже, ведь ста есть соап е не джсон
            Ответить
          • Ну как, теперь знаешь?
            Ответить
    • А мне кажется то, что нет ничего постыдного в незнании стандартной пыхобиблиотеки. Неплохой говнокод.
      Ответить
      • Писать на пхп вообще постыдно, а не знать стдлибу япа на коем говнокодишь и вовсе треш
        Ответить
        • Это Ваше субъективное ИМХО, у многих руки не доходят до других языков. А скажите мне, на чем писать не постыдно для Вас? По любому все зависит от прямых рук и "положительного" опыта программиста.
          Ответить
          • Да тут у половины форума такое имхо) Попробуйте сделать пару проектов на других языках (пайтон/джанга, руби/рельсы), и сами всё поймете:)

            Ну и конечно нужно гуглить и читать замечательную статью "фрактал плохого дизайна")
            Ответить
            • Да я уже читал 100500 раз эту статью, и меня посылали тоже на нее 100500 раз. Наверное вы не читали эту статью: http://blog.ircmaxell.com/2012/04/php-sucks-but-i-like-it.html
              Ответить
              • Довольно странная статья.

                >> PHP is inconsistent. It is verbose. It does have a lot of weird behavior. It does have a lot of >>problems. It can be ugly. It can be really awkward to work around. It can leave a lot to be
                >>desired.

                После этого было бы логично услышать что остальные еще хуже, но вместо этого мы слышим:

                >>But it's also incredibly powerful.
                В чем измеряется поуерфульность языков? Я считаю что perl на 3.442% более поверфул чем пхп.

                >>It's really easy to write working applications.
                Верно-ли я понимаю что на python или ruby it is very hard to write working applications?

                >>It's really easy to create a large scale project
                Совершенно не понятно чем на PHP это сделать легче чем не на ПХП.

                >>Be useful to non-developers
                Нондевелоперу пофиг на чем написан проект: на PHP или на Brainf*ck. Причем же тут язык?

                >>You don't need a library or a framework to talk HTTP.
                Это _ПЛОХО_. Это называется "засирание глобального неймспейса" и провоцирует писать код, завязанный на HTTP.

                >>That means that transitioning code from CLI to a server API is trivial (it's just changing how it gets the request variables)

                Человек зашивается в своем коде на переменные, полученные по HTTP и не стесняется этого!

                >>Absolutely gigantic user base. Sure, other languages have large followings, but few are as large as PHP.
                Если выкинуть из этой базы откровенно плохих программистов, то ничем она от рубей или пайтона не отличается.


                Впрочем "Ideally, don’t tell me anything! This is my one big shot; if this list doesn’t hurt your opinion of PHP, nothing ever will" :)
                Ответить
                • Это был не я, но я, пожалуй, сделаю очень важное (к, собственному смущению, не своё) дополнение-перевод:
                  http://habrahabr.ru/post/142195/
                  Ответить
                  • Спасибо:) Впрочем, моих познаний английского хватило на эту статью, это же не "Сон в летнюю ночь" в оригинале:)
                    Ответить
          • > у многих руки не доходят до других языков
            потому что что?
            я ем говно, но не потому что я не могу попробовать что-то другое и не потому что мне нравится это делать (возможно, совсем не нравится), просто мне лень тянуться к чему-то другому
            Ответить
          • > По любому все зависит от прямых рук и "положительного" опыта программиста.
            Вот, что на это отвечает автор каноничной статьи "PHP: a fractal of bad design" (на нее выше Анонимус ссылается)

            > Do not tell me that “good developers can write good code in any language”, or bad developers blah blah. That doesn’t mean anything. A good carpenter can drive in a nail with either a rock or a hammer, but how many carpenters do you see bashing stuff with rocks? Part of what makes a good developer is the ability to choose the tools that work best.
            Ответить
            • И отмазка "я не виноват, меня работодатель заставил" тоже не катит. Ибо от работодателя, который заставляет забивать гвозди камнями, все нормальные работники тупо разбегутся.
              Ответить
              • У меня такое ощущения что вы встречались только с говнокодом и никогда не видели более или менее нормальный код на PHP. Если я продолжу этот спор я уверен что меня засыпают минусами, т.к. "Писать на пхп вообще постыдно"
                Ответить
                • Программисты - это злые формалисты-тролли с нездоровой долей фанатизма и твёрдой уверенностью в своей правоте, готовые раздавить любого, кто использует по их мнению неправильный язык.
                  Мнения фанатиков можно не учитывать*, продолжая писать на том языке, который позволит яснее и естественней выразить свои мысли в рамках задачи. А то добрые люди сначала посоветуют оставить PHP, потом JS, потом про C++ и Haskell плохое скажут, потом распнут твои жизненные идеалы, заставят жениться на той, кого не любишь, ради денег и успеха, а в конце и вовсе выпнут из программирования, лишив возможности творить.

                  * Разве что, писать на навязанных троллями-программистами языках за еду, когда уже выхода совсем нет, когда либо писать на их языке, либо бомжевать.
                  Ответить
                  • Я бы генерализировал:

                    [...]- это злые формалисты-тролли с нездоровой долей фанатизма и твёрдой уверенностью в своей правоте, готовые раздавить любого, кто [..] по их мнению неправильный [..]
                    -------
                    Но это конечно не повод не указывать на объективные минусы некачественных инструментов.
                    Ответить
                    • > объективные минусы некачественных инструментов
                      А вот тут не всё так просто. Одно дело - когда производитель экономит на металле и делает мягкую отвёртку. Другое дело - когда отвёрткой закручивают гвозди и говорят, что это плохой инструмент.
                      В программировании же гораздо больше путей (и инструментов) для того, чтобы получить один и тот же результат. Тут вполне возможна отвёртка с металлическим набалдашником для забивания гвоздей. Её легко и удобно носить в кармане каждый день; стоит лишь повернуть руку, как отвёртка заменится на молоток. И у такого инструмента существуют лишь характеристики, большинство недостатков же надуманны и относительны. Скажем, большая масса позволит легко забивать гвозди, но малая масса позволит всегда держать инструмент при себе хоть в космосе; объединение в один предмет позволит легко потерять молоток, потеряв отвёртку, но разделение потребует использования лишней руки/карманов/ассистента, который будет держать инструмент. Все реальности минусы здесь сводятся к тому, что лак на ручке быстро отслаивается у продукции производителя А.

                      По-моему, в программировании объективные минусы - это что-то отдалённое от суровой реальности вроде неполноты по Тьюрингу. Остальное же - следствие "я не пользуюсь, поэтому не нужно", "я пользуюсь, следовательно без этого нельзя", "мне неудобно, поэтому всем тоже" и "если язык не решает моих задач, он говно".
                      В итоге все друг друга ненавидят, холиварят и сжигают на кострах неверных, если вдруг собралась достаточно большая толпа для того, чтобы не испугаться и поймать одного человека.

                      Глупо ругать жс за прототипы и сборку мусора, а плюсы - за невозможность добавления метода к существующему объекту и ручное управление памятью. Надо стараться изводить в себе это непонимание других ОС, других языков, других парадигм. Если Вася может качественно и с удовольствием написать нужную для дела программу на языке А, Пете, любителю языка Б, лучше помолчать.
                      Ответить
                      • >> Другое дело - когда отвёрткой закручивают гвозди и говорят

                        PHP это именно что мягкая отвертка. Точнее говоря ею удобно закручивать шуруп размером в одну страничку, весь код которой помещается на экране.
                        Но такие задачи возникают раз в 12 лет.

                        >> большинство недостатков же надуманны и относительны

                        Скажите, Вы читали статью, которую я тут приводил?

                        >> вроде неполноты по Тьюрингу.
                        BrainFuck и ook полны по Тюрингу. Хотите на них писать? Хотите писать под саму машину Тюринга, кстати?

                        Аналогия с JS и C++ тут неверна совершенно. Отсутствтие статической типизации и GC это фичи, и они могут быть хорошими или плохими, нужными или не нужными, но это -- фичи.

                        Отсутствие неймспейсов и каша в стандартной библиотеке это не фича а бага.

                        Понимаете?

                        Существуют ситуации когда на JS можно написать код элегантнее, чем на C++.

                        Но не существует ситуации когда на PHP можно написать код элегантнее чем на Python или Ruby (кроме той самой ситуации с выводом результатов одного запроса в одну страничку)

                        Всеми плюсами, которые есть у PHP, обладают так же пайтон и руби.
                        А вот минусами его не обладают.
                        Именно потому я и считаю его плохим.

                        Точно так же и с MySQL, например: у MySQL нет ни одного приимущества перед PostgreSQL, а вот у постгри перед мускулем -- есть. Потому я считаю MySQL плохой базой данных.

                        А вот SQLite не считаю, потому что у него есть свои приимущества.

                        Впрочем, холиварить тут и правда смысла нет: это тот самый случай, когда "если надо объяснять, то не надо объяснять".:)
                        Ответить
                        • > ни одного приимущества перед PostgreSQL
                          + Стоит на любом бесплатном говнохостинге.
                          + Умеет делать count(*) за O(1) для MyISAM таблиц.
                          Ответить
                          • Убедили. Если мне нужно будет написать проект который постоянно делает count(*) из огромных таблиц без поддержки ACID/транзакций и так же мне нужно будет чтобы этот проект работал на бесплатном хостинге , то я обязательно выберу MySQL.
                            Ответить
                          • - Сортировка за O(n**2) на том же MyISAM
                            Ответить
                            • Да кому нужна эта сортировка? Записи же всяко считают чаще!
                              Ответить
                              • Ну, кстати говоря, в одном знакомом серваке была команда для подсчета количества зарегенных юзеров.
                                Ответить
                                • Да, я тоже такие счетчики видел. Причем они считали количество людей онлайн (второй крайностью был подсчет кол-ва файликов в сессиями в папке /temp). Но с MySQL было круче.

                                  А один сайт даже снежинки рисовал на новый год, и вот количество снежинок было равно количеству пользователей.
                                  Ответить
                                  • Нет, количество людей онлайн сервак возьмет из памяти, а запрос зарегенных будет именно из db.
                                    Ответить
                                    • >>Нет, количество людей онлайн сервак возьмет из памяти,
                                      Ну в моем случае речь шла о php 3, там особо было из памяти-то и не взять.

                                      На самом деле MyISAM в любом случае нельзя использовать ни на чем, кроме бесплатных гостевых книг ввиду отсутствия ACID
                                      Ответить
                        • > Скажите, Вы читали статью, которую я тут приводил?
                          Я слишком ленив для этого. Может, когда-то видел перевод, который здесь привели. Но всё же хотя бы его перечитаю.

                          Комментарий писал, думая об угнетении поклонников жс и распространяя его на остальные языки, рассуждал об общей толерастии в программировании.
                          Ответить
                          • С JS ситуация немного иная.

                            Я тоже считаю что писать на JS чаще всего не следует, кроме разве что фронтенда (тут выбора нет, если не считать что-то, что компилируется в JS).

                            Но у JS была/есть своя идеология: они попытались сделать прототип ориентированный язык.
                            Это казалось крутым.

                            Но оказалось что это вовсе не круто, и за 20 лет существования JS так и не обзавелся качественными бест-практисами. Ну тут уж они не виноваты: попробовали -- не получилось)

                            А Вы поклонник JS? Вам нравится отсутствие в языке неймспейсов, модульности, нормального ООП и чехарда с типизацией?
                            Ответить
                            • > А Вы поклонник JS? Вам нравится отсутствие в языке неймспейсов, модульности, нормального ООП и чехарда с типизацией?

                              Да. Я очень люблю жс, на нём получается легко излагать свои мысли.
                              Отсутствие неймспейсов бугурта не вызывает, т.к. всегда можно спрятать всё тайное в замыкание (и без отдельных плясок это снаружи вообще никто не увидит) или в объект. Тут и модульность близко, если нет Node.js.
                              "Нормальное" ООП мне меньше нравится, чем прототипы. Нормальное ООП - это ограничение, прототипы - удобство и свобода.
                              Из чехарды с типизацией меня раздражает typeof null === 'object'. Приходится писать "if(typeof x === 'object' && x)", чтобы проверить на объект. Сумму числа и строки и преобразование в число унарным плюсом считаю счастьем (когда питон мешает мне это сделать, я с грустью закрываю его интерпретатор и открываю интерпретатор жс). Массивы в строку нигде кроме отладочной печати не привожу, а в число - только случайно. И всё работает.
                              Чего мне очень не хватает, из-за чего я обижен на жс - так это перегрузки операторов (хочу метатаблицы как в Lua) и шаблонов с макросами как в C/C++. И конечно же функций из Array.prototype в массивоподобных объектах.
                              Ответить
                              • А расскажите как Вы реализуете модульность и реюзабельность кода?
                                Как выглядит API? У Вас есть какие-то примеры на гитхабе или еще где?
                                Ответить
                                • В Node.js я бы написал... Хотя, это не важно, т.к. там с модулями всё отлично.
                                  В браузере бы я написал
                                  (function(){
                                    window.hello = "hello";
                                    window.world = function(x){ return x; };
                                  })();

                                  Ну или я бы вынес в один объект то, что для браузера.

                                  Серьёзные примеры - это надо смотреть у людей уровня Борманда, я же до таких высот не дорос. Больших библиотек, которые зависят от библиотек, которые зависят от других библиотек, предназначенных для запуска в браузере, я не писал, и мои потребности в модульности ограничены.
                                  Ответить
                                  • > Серьёзные примеры - это надо смотреть у людей уровня Борманда
                                    Лолшто :)

                                    Мой гитхаб стыдно показывать... А проекты по работе - само собой NDA.
                                    Ответить
                                    • Вы так говорите, как будто случайно заполучили пароль того мудрого человека, который раньше писал про алгоритмы, языки, структуры данных, суровую ассемблерную реальность и многое другое.
                                      Ответить
                                      • > который раньше писал про алгоритмы, языки, структуры данных, суровую ассемблерную реальность и многое другое

                                        Писать про != иметь много годных проектов, которые не стыдно показать.
                                        Ответить
                                        • И то верно. Царь лучше всех знал про пирфоманс, но не показал ни одного годного проекта.
                                          Ответить
                                          • > годного проекта
                                            Он, емнип, вообще никакого не показал.
                                            Ответить
                                            • Но он же пытался написать парсер torrent-файла!
                                              Ответить
                                            • Так он же спец по сниппетам, которые память обходят. За них бабок не заплатят, так он ведь это не за бабки делает.
                                              Ответить
                                        • >>Писать про != иметь много годных >>проектов, которые не стыдно показать.
                                          Тем более на клиент-сайде:)

                                          Хотя имидж серьезного программиста обязывает разбираться во всем;)
                                          Ответить
                          • > угнетении поклонников
                            Бейте их, унижайте их! Поклонники - не люди.

                            Не надо выбирать язык исходя из фанатичной любви к нему. Всё-таки это всего лишь инструмент. А над фанатиками можно и нужно стебаться - в конце концов они от этого могут изучить какой-нибудь другой язык и перестанут замыкаться в своём уютном пыхо/жсо/крестомирке...
                            Ответить
                            • К большому моему сожалению нужно признать что большинство людей -- фанатики. Они изучают технологию FOO, называют все остальные технологии говном, и на том и стоят.

                              В юности я регулярно наблюдал споры между любителями продуктов Microsoft и Linux (или FreeBSD), и обе стороны совершенно не хотели друг друга слышать, даже не понимали о чем говорит оппонент, и только обкладывали друг друга хуйами.
                              Ответить
                        • Начал читать. Интересный эффект: оказывается, я мог прочитать статью, помолчать и за умного сойти. Но нет, не вышло.
                          Ответить
                          • Ну вот видите) Это же не просто статья "язык Foo говно, потому что там скобочка, а в моем любимом языке -- табик". Такую статью я бы не стал советовать, правда)
                            Ответить
                        • >BrainFuck и ook полны по Тюрингу. Хотите на них писать? Хотите писать под саму машину Тюринга, кстати?
                          А брейнфак - это не асм под машину Тьюринга?
                          Ответить
      • постыдно не уметь пользоваться гуглом.
        Ответить

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