"PHP" / Говнокод #13685 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 businessduck, (Updated )

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

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

    Акадамики, бля буду иисусе, PhD сучий потрох ... Синдорм умного человека x)
    Ответить
    • p.s.: надо это ... пиздить тех, кто много думает над ситуациями, котрых быть не должно ... чтобы те кто это пишет не думали о хуйне и пиздили тех, кому эта хуйня нравится ... надо это ... ограничивать любителей свободного полета фантазии и мнимого удобства предусматривающего все и вся ... это просто программа , она должна просто помогать тебе делать что либо хорошо и все ... смысла предусматривать все мнимые мудизмы нет на уровне логики, есть смысл избавиться от хуйни сразу D: сабж
      Ответить
  • Не берусь утверждать, т.как давно это было, но родной json_encode тоже говно то еще. Там и проблемы с Юникодом были, и проблемы с пониманием типов данных.
    Ответить
    • Именно, использовал такой же велосипед, т.к. встроенная функция из кириллицы делает /uXXXX
      Ответить
      • Оло ло, притом, что строки кодируются в utf8, это как мой недавний гк, где в xml в utf8 не-аски символы кодировались в последовательности.
        Ответить
        • Эм, ну или копируются при вставке в хеш, или 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, та самая мутабельная строка 😉 Можно править, можно на свой страх и риск передавать куда-нибудь.
                        Ответить
              • Почитайте, пожалуйста, описание к примеру 😉

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

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

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8