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

    +155

    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
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    <?php
    class Json_Encode {
        public function Encode($obj) {
            $str = "";
            $type = gettype($obj);
            if ($type == "array") {
                $fst = 1;
                
                if (array_keys($obj) !== range(0, count($obj) - 1)) {
                    $str .= "{";
                    foreach($obj as $id=>$el) {
                        if ($fst) {
                            $fst = 0;
                        } else {
                            $str .= ",";
                        }
                        $str .= "\"$id\":";
                        $str .= $this->Encode($el);
                    }
                    $str .= "}";            
                } else {
                    $str .= "[";
                    foreach($obj as $el) {
                        if ($fst) {
                            $fst = 0;
                        } else {
                            $str .= ",";
                        }
                        $str .= $this->Encode($el);
                    }
                    $str .= "]";            
                }
            } else if ($type == "string") {
                $str .= "\"$obj\"";
            } else if ($obj == null) {
                $str .= "null";
            } else {
                $str .= "$obj";
            }
            return $str;
        }
    }

    Листинг файла json_encode.php
    От души посмеялся.

    Запостил: businessduck, 28 Августа 2013

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

    • бля, это говно еше и рекурсивное.....
      Ответить
      • до пыха 5.2 "из коробки" json_encode не было.
        Ответить
        • да это понятное дело, но при этом в проекте используется mysqli. Дата создания 2012 год кстати)
          Ответить
          • так это и надо было в подписи к коду написать. Свои велики они такие уютные домашние
            Ответить
    • На картине изображен новоизобретенный велосипед бег колес на кошачей тяге, я правильно понял?
      Ответить
    • показать все, что скрытоЛул :D А че там по MVC паттернам запилить в самом начале выплевывателя заголовок правильный, потом сделать тяпку-ляпку типа for ... echo "{" . $key .":" . $value . "," . "\r\n" . "}"; !$#@@%@#^! :DDD

      Акадамики, бля буду иисусе, PhD сучий потрох ... Синдорм умного человека x)
      Ответить
      • показать все, что скрытоp.s.: надо это ... пиздить тех, кто много думает над ситуациями, котрых быть не должно ... чтобы те кто это пишет не думали о хуйне и пиздили тех, кому эта хуйня нравится ... надо это ... ограничивать любителей свободного полета фантазии и мнимого удобства предусматривающего все и вся ... это просто программа , она должна просто помогать тебе делать что либо хорошо и все ... смысла предусматривать все мнимые мудизмы нет на уровне логики, есть смысл избавиться от хуйни сразу D: сабж
        Ответить
    • Не берусь утверждать, т.как давно это было, но родной json_encode тоже говно то еще. Там и проблемы с Юникодом были, и проблемы с пониманием типов данных.
      Ответить
      • Не берусь утверждать, но PHP вообще не конфетка.
        Ответить
      • Именно, использовал такой же велосипед, т.к. встроенная функция из кириллицы делает /uXXXX
        Ответить
        • Оло ло, притом, что строки кодируются в utf8, это как мой недавний гк, где в xml в utf8 не-аски символы кодировались в последовательности.
          Ответить
    • А строке в пыхе мутабельные, или опять O(n**2) получаем?
      Ответить
      • Мутабельные.
        Ответить
        • А как они тогда могут быть ключами в хеше?
          Ответить
          • Эм, ну или копируются при вставке в хеш, или COW.

            Ну и в общем-то они ведут себя как значения, а не как ссылки:
            $a = "хуи";
            $b = $a;
            $a[2] = "й";
            print $a; // "хуй"
            print $b; // "хуи"
            Ответить
            • Поп в церковно-приходской школе, ведет урок физики:
              - Ответствуйте олухи, что легче всего на свете?
              Вовочка тянет руку.
              - Говори отрок.
              - Хй, батюшка!
              - Обоснуй!
              - От одной мысли встает!
              - Озорно, но справедливо! Ответствуйте далее, олухи, что тяжелее всего на
              свете?
              Вовочка тянет руку.
              - Говори отрок.
              - Хй, батюшка!
              - Обоснуй!
              - Не захочет, и краном не поднимешь!
              - Ох, озорно, но справедливо! Ответствуйте далее, олухи, что быстрее
              всего на свете?
              Вовочка тянет руку.
              - Уймись отрок, так ты мне на х*ю всю физику построишь
              Ответить
          • А в чем проблема? одинаковый набор символов выдает одинаковый хеш. Ну если залез в ключи и поменял - прощай значение по ключу
            Ответить
            • Не, аноним, видимо, опасается вот такой ситуации:
              $a = "foo";
              $m[$a] = "val";
              $a[0] = "b"; // портим строку (а заодно и ключ в хеше)
              $m["foo"]; // нету
              $m["boo"]; // внезапно есть
              Но так не будет, т.к. строки ведут себя как значения.
              Ответить
              • если в языке строки устроенны так - он упорот. В большенстве случаев нужно копировать строку, а не ссылку по этому логичнее обычно присвоение сделать копированием, а а копирование ссылки - специальным методом. Ну или просто возможность создавать строки на стеке или в куче по желанию
                Ответить
                • В подавляющем большинстве ЯВУ (имхо) поэтому строки неизменяемые. Пых у нас особый.
                  Ответить
                  • Ну на самом деле 3 вида строк есть:

                    1) иммутабельные (аля python, java, haskell, js, c# и т.п.);
                    2) мутабельные с полным копированием (аля c++'ный std::string, PHP ниже 5.0, perl?);
                    3) мутабельные с COW(copy-on-write) (строки в Qt, delphi, PHP 5.0+).

                    P.S. Про PHP могу гнать, в одному комменте со стековерловочки про COW в 5.0+ прочел, глубоким анализом не занимался.

                    > подавляющем большинстве
                    Ну да, так оно и есть. Ну только не всех языков, а именно используемых в настоящее время.
                    Ответить
                • > если в языке строки устроенны так - он упорот.
                  Ну в жабе и питоне, к примеру, они именно так и устроены :) Просто они там иммутабельны, поэтому всем похуй.
                  Ответить
                  • Я имел в виду внешнюю реализацию.

                    И в питоне тоже? А в чем тайная выгода? Что бы стек не корежило когда строка из 0б внезапно увеличивалась до 9000?
                    Ответить
                    • Ну во-первых любые иммутабельные объекты потокобезопасны. Раз его никто никак не может поменять, то и проблем с конкуренцией никаких.

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

                      В-третьих у таких строк очень дешевые слайсы.

                      > стек
                      А причем тут стек? В той же жабе на стеке только ссылка на строку, лежащую в куче.

                      P.S. Вообще, в инете довольно часто ведутся холивары, насчет того, какие строки лучше - иммутабельные, полностью копируемые или cow :) Тут они когда-то тоже были.
                      Ответить
                      • Если бы она была изменяема, то для поддержания прывычного поведения пришлось бы делать ее примитивом. Или я гоню?
                        Ответить
                        • Ну если про яву - то да, пришлось бы сделать примитивом, т.к. все объекты передаются по ссылке, а нам эта передача по ссылке тут как раз не нужна.

                          Если про кресты - то нет. Там с этим свободней. В крестах юзают и cow строки (c++ builder, qt) и просто копируемые по значению (std::string).

                          А в пыхе она и является одним из примитивов.
                          Ответить
                          • Если не путаю в крестах можно выбирать где создавать обьект - на стеке или в куче. И поведение будет соответствующим.

                            А в java даже структур нету - классы да примитивы
                            Ответить
                            • > в крестах можно выбирать где создавать обьект - на стеке или в куче
                              Можно и в других местах, если очень хочется...
                              Ответить
                              • прям в кеше?
                                Ответить
                                • > прям в кеше?
                                  Не, ну не настолько же... Хотя если размещать объекты в маленьком пуле, который не выжимает из кеша из-за того, что его часто юзают, то так оно и будет.

                                  В расшаренной памяти например, или в заmap'анном в память файле, или в самопальном пуле, память под которую выпросили у оси в обход менеджера кучи...
                                  Ответить
                        • Ну хотя вон есть же StringBuilder, та самая мутабельная строка ;) Можно править, можно на свой страх и риск передавать куда-нибудь.
                          Ответить
              • опять мой пых так не может. У Вас точно пых ?
                http://ideone.com/lNtdHl
                Ответить
                • Почитайте, пожалуйста, описание к примеру ;)

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

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

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