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

    +158

    1. 1
    2. 2
    3. 3
    function addGetParam($key,$value){
        $_GET[$key]=$value;
    }

    В аду найдется специальное место для таких :-)

    Запостил: aleksssmix, 11 Октября 2013

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

    • показать все, что скрытоЛАВИ ЛАЙК!!!!!! ОЙ КАЖЫЦА ДИЗЛАЙК ПАСТАВЕЛ НУ ТИПЕРЬ НИЧИВО С ЕТИМ НИПАДЕЛАИЖ(((9(девять
      Ответить
    • показать все, что скрытоКСТАТЕ ПАДУЧИ РУЗКИЙ А ТО АШИБАК СТОЛЬКА ПЗДЦ МАИ ГЛАЗА
      Ответить
    • Больше кода - больше зарплата :-)
      Ответить
    • я бы на месте пхп сильно материл кодера за сей финт
      Ответить
    • Кому-то на пехапе с литералами хешема и списка захотелось жавапроблем
      Ответить
      • поясните мысль
        Ответить
        • Это типичный жавастайл

          request = new Request();
          request.addGetParam('ты','хуй');
          request.addGetParam('твоямать','шлюха');


          Поскольку в рнр есть хешмеп литералы, то можно сделать как-то так:

          get(url, {
              'ты': 'хуй',
              'твоямать','шлюха',
          })
          Ответить
          • В PHP они как-то по-другому выглядели, насколько помню. И вообще с именованными аргументами функций было бы лучше.
            Ответить
            • Начиная с 5.4 вроде как можно можно [ "ты" => "хуй", "твоямать" => "шлюха" ], а до этого вместо [] юзается array().
              Ответить
              • кстати, меня пыховские мапомассивы когда-то обидели:
                $a=array("1"=>"a","2"=>"b"); $k="1"; echo $a[$k];
                что выведет?
                Ответить
                • "a"?
                  Ответить
                  • а у меня почему-то были "b"
                    Ответить
                    • Ну х.з. Ман говорит нам:
                      Additionally the following key casts will occur:

                      - Strings containing valid integers will be cast to the integer type. E.g. the key "8" will actually be stored under 8. On the other hand "08" will not be cast, as it isn't a valid decimal integer.
                      - Floats are also cast to integers, which means that the fractional part will be truncated. E.g. the key 8.7 will actually be stored under 8.
                      - Bools are cast to integers, too, i.e. the key true will actually be stored under 1 and the key false under 0.
                      - Null will be cast to the empty string, i.e. the key null will actually be stored under "".
                      - Arrays and objects can not be used as keys. Doing so will result in a warning: Illegal offset type.


                      Т.е. по первому правилу должно получиться "a".
                      Ответить
                      • почему "a"? $a["1"] === $a[1]
                        > E.g. the key "8" will actually be stored under 8
                        Ответить
                        • Дык конструктор же тоже конвертит ключи:
                          print_r(array("1"=>"a","2"=>"b")
                          
                          Array (
                              [1] => a
                              [2] => b
                          )
                          
                          print_r(array("2"=>"a","1"=>"b")
                          
                          Array (
                              [2] => a
                              [1] => b
                          )
                          Ответить
                          • хм, надо мне откопать тот мой старый код, где ключи приходили цифровыми, и чтобы ассоциативность сохранялась, мне пришлось добавлять к ключам "_", а при извлечении - удалять, чтобы ключи вида "_666" не были валидным числом и не означали индекс, а именно ключ.

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

                            з.ы. json - более чем подходит
                            Ответить
                            • Есть слухи, что в архаичных версиях пыхи этих правил еще не было. И "1" и 1 представляли собой два разных ключа. Чем доставляли пыхерам батхерты ;)

                              > и не означали индекс, а именно ключ
                              Я не пойму, а в чем проблема то? Ассоциативно пихается. Ассоциативно достается. Форичем оббегается. Что еще нужно для работы с этим контейнером, как с ассоциативным массивом?
                              Ответить
                              • проблема только в том, что я однажды кодя под заказ под некую пыхоцмс, словил немалый связанный с этим баттхерт, пока не понял, в чем дело. после чего и люто возненавидел совмещения индексов с ключами и дефолтное кастование.
                                Ответить
                                • > совмещения индексов с ключами
                                  Все равно не понимаю, как надо использовать пыхомассив как ассоциативный массив, чтобы проявился какой-то баг... Сравнивать добытые из него foreach'ем ключи на === что-ли? :)
                                  Ответить
                                  • я все еще имею ввиду неявное кастование и (не)упорядоченность.
                                    хм, надо все же добыть тот древний код (а то я еще и выпил...)
                                    Ответить
                                    • > (не)упорядоченность
                                      Самое забавное, что пыхомассив имеет не только ключи и индексы, но еще и порядок ;) И, в отличие от других ассоциативных контейнеров, которые или тупо сортируют все в порядке возрастания (жабий TreeMap), или как попало (жабий HashMap), пыховский "массив" обходится именно в порядке добавления...

                                      Ну и вообще. Как можно требовать упорядоченности от ассоциативного контейнера? Вон жабий HashMap тоже не в алфавитном порядке оббегается, он теперь плохой? :)

                                      > неявное кастование
                                      Ну его если и убирать, то во всей пыхе.
                                      Ответить
                                      • просто хочется иметь разделение, а вместе с тем и более твердую уверенность, что все будет либо работать так, как надо, либо немедленно пошлет нахуй.
                                        а такое поведение "дай я угадаю, что ты хотел, и сделаю что-то за тебя" - чревато багами.
                                        Ответить
                                      • array() = OrderedDict? Будем знать.
                                        Ответить
                                      • в жабе есть и LinkedHashMap
                                        Ответить
          • я влегкую делал, что можно так:
            request = new Request(url,"ты","хуй","твоямать","шлюха ").addGetParam("пшел","нах");
            так что это не жабастайл, это у кодеров мозги не так повернуты.
            Ответить
            • new Request(url).addGetParam("пшел","нах").a ddGetParam("пшел","нах")..addGetParam("п шел","нах"); это по-прежнему жабостайл, вызванный осутствием литерала хешмепа. В языке с оным писать такую поеботу может только или жаваблядь, или человек, который где-то это увидел и не задумываясь скопировал.
              Ответить
              • часть
                > new Request(url,"ты","хуй","твоямать","шлюха ")
                конечно же, была проигнорирована. а тем не менее, тут только фигрных скобок нет, и запятая вместо двоеточия.
                Ответить
                • Причем в пыхе этот литерал массива смотрится ничуть не лучше:
                  new Request(url, array("ты","хуй","твоямать","шлюха"))
                  Правда там можно передать джва таких литерала. А в яве с вариадик аргументом так не выйдет :)

                  P.S. Хотя можно написать хелпер array() и тыкать им в морду пыхерам.
                  Ответить
                  • всегда завидовал жабаэкмаскрипту за его краткость, ныне известной как json
                    с ней, лямбдами, перегрузкой операторов, функциями первого класса да примесями - мир покорять (и со статичной типизацией)
                    Ответить
                    • > с ней, лямбдами, перегрузкой операторов, функциями первого класса да примесями
                      Питон ;)

                      > и со статичной типизацией
                      А нет, не питон ;(
                      Ответить
                      • питон более чем прекрасен, но не могу ему простить:
                        1. непроизвольное форматирование отступами (ну не смогу я на нем писать однострочники)
                        2. более процедурным походом, когда пишем х(а) вместо а.х()

                        в этом плане мне более симпатичен Руби
                        Ответить
                        • х(а): x - левая функция
                          а.х(): x - функция объекта a

                          теперь ты знаешь, что делать?
                          Ответить
                        • В руби есть свой шарм. И да, он самый няшный язык, ведь написал его японец
                          Ответить
                        • > ну не смогу я на нем писать однострочники
                          точка с запятой же есть

                          > более процедурным походом
                          Гвидо просто не страдает оопизмом головного мозга и позволяет использовать ту "парадигму", которая больше подходит к задаче. Идеология "все - объект" поддерживается в python полностью, так что претензия непонятна.
                          Ответить
                          • >точка с запятой же есть
                            В одной строке может быть не больше одного двоеточия.
                            Ответить
                            • >>В одной строке может быть не больше одного двоеточия.

                              catch (const char * str)
                              
                                {
                              
                                    std::cout << "Exception: " << str << std::endl;
                              
                                }
                              
                                return 0;

                              http://i52.tinypic.com/hu2jdc.png
                              Ответить
                              • Я про питон, чудило. Там двоеточие и отступ вместо фигурных скобок
                                Ответить
                                • http://img7.imageshost.ru/imgs/090724/6755c6bcc3/a580b.jpg

                                  И где ты тут видишь точку с запятой, чудило?

                                  D
                                  Ответить
                      • >> и со статичной типизацией
                        >А нет, не питон ;(
                        Увы. Вот статичного питончика бы...
                        Ответить
                  • > P.S. Хотя можно написать хелпер array() и тыкать им в морду пыхерам.
                    Done.
                    http://govnokod.ru/8752#comment124144
                    Ответить
                • new Request(url,"ты","хуй","твоямать","шлюха ")
                  Очень охуенно читается при количестве элементов так за 10 (где ключ где значение?), и как ты собираешься это читать, чтобы юзер не подсунул нечетное количество параметров? Отсос.
                  Ответить
                  • форматированием исходного кода, например
                    new Request(url,
                    "ты","хуй",
                    "твоямать","шлюха "
                    )
                    Ответить
                    • на самом деле фигня какая-то. Ну вот получил ты legacy code, а там все обьявления в одну строку. пол дня будешь только разворачивать. неудобно, имхо
                      Ответить
                    • Которое тебе распидарасит эклипсовский форматтер, не дай бог он еще в настройках проекта из svn включен на автоформат.
                      Ответить
                  • > чтобы юзер не подсунул нечетное количество параметров
                    Проверка на четность в рантайме.

                    > где ключ где значение?
                    Ну можно еще вот таким, более многословным способом:
                    new Request(url,
                        new Param("ты", "хуй"),
                        new Param("твоямать", "шлюха")
                    );
                    Хотя это уже мало отличается от addParam.
                    Ответить
                    • Все это сводится к вопросу "как мне задать хешмеп".
                      Ответить
                      • > Все это сводится к вопросу "как мне задать хешмеп?".
                        Все это сводится к вопросу "а часто ли в жабе нужен литерал хешмапа?". В конце-концов жаба это не скриптовый язык, в которых из-за их гибкости и динамизма хешмап является краеугольным камнем (а в некоторых вообще используется вместо объектов)...

                        Назови навскидку какую-нибудь ситуацию, в которой нужен литерал хешмапа. Ну кроме подготовки SQL запроса/URL'а.
                        Ответить
                        • Мало, чтоли? keyword параметров ведь тоже нема.

                          В пыхе они есть, следовательно - страдать хуйней незачем.
                          Ответить
                          • > Мало, чтоли?
                            Мало конечно. Ради двух юзкейсов делать целую языковую конструкцию, намертво прибитую к одному классу HashMap? Хватит уже и StringBuilder'а намертво прибитого к плюсику... Приводи еще юзкейсы для литерала мапов, будем обсуждать :)

                            > keyword параметров ведь тоже нема.
                            Были бы полезны. Кстати, в жабе даже дефолтных параметров нет, не то что кейвордов :)
                            Ответить
          • Анус-припеканус, жавабляди!
            Ответить
    • Кажется, я допер, в чем ГК. Модифицировать глобальный массив $_GET... Такое разве что в тестах можно.
      Ответить
      • Да даже если в тестах, зачем для этого специальная функция?
        Ответить
        • > зачем для этого специальная функция
          Искать и выпиливать потом легче ;)
          Сравни поиск функции по имени и поиск всех $_GET, большинство из которых безобидны, и только читают.
          Ответить
          • Можно же составить регулярку, которая даже будет правильно находить присваивание почти всегда. Но да, функцию искать проще.
            Ответить
    • vanished
      Ответить

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