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

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
function make_json($array){

    $json = '{';
    $pairs = array();

    foreach($array as $key=>$val){
        if (!is_numeric($val)) { $val = "'{$val}'"; }
        $pairs[] = "{$key}: $val";
    }

    $json .= implode(', ', $pairs);
    $json .= '}';

    return $json;

}

Запостил: dm_fomenok dm_fomenok, (Updated )

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

  • В переводе с санскрита PHP означает "язык для тупорылых любителей квадратноколёсных велосипедов"
    Ответить
  • - "Почему не json_encode" - насмехаясь скажет крутой суперпрограммист
    - "Кодировка, в старых версиях" - ответ бывалого)))
    Ответить
    • Да и json_encode появился только в 5.2. У меня есть код, который использует библиотеки 2008 года. Там таких костылей много.
      Ответить
  • Вы смеетесь над пхп, а в божественной сишачке такое делает каждый второй. Потому что ценители божественной сишачки не могут в нормальный код, да и удобных библиотек не завезли.
    Ответить
    • Я тоже похожее делал (только с экранированием строк, конечно). Ибо json_encode в сишку не завезли.
      Ответить
    • > да и удобных библиотек не завезли

      Удобные библиотеки завезли, не завезли удобного способа их подключать.
      Ответить
      • Можно пример удобной библиотеки для няшной? То, что я видел, удобным не показалось. Хотя меня в целом от няшной воротит, не могу представить, как там что-то может быть удобным.
        Ответить
        • Удобных - нету, ибо сишка далеко не самый удобный язык. С владением, контекстами, строками, трансляцией кодов ошибок придётся поебаться... Но адекватных для решения задачи - полно.

          Жопа начинается, когда системы сборки либы и твоего проекта не совпадают... Вроде и либа есть, а поюзать - хуй.
          Ответить
      • )по сравнению с ПХП обычный сишный Makefile и инклудгарды это просто магия и волшебство
        Ответить
        • > обычный сишный Makefile
          Их нынче только для hello world юзают, не переживай...

          > инклудгарды
          А в чём там магия? После первого втыкания куска текста тупо взводится переменная и второй раз этот кусок уже не втыкается. Если имена этих переменных не повторяются - никаких проблем с гардами нету.
          Ответить
          • >>Их нынче только для hello world юзают, не переживай...
            Да ну ладно) Их много где юзают. Просто вместе с autoconf всякими.
            Короче в сишечке реализовать модульность можно, но вручную, с бубном, но можно же.

            >>А в чём там магия?
            Да я не в том смысле что это магия, а в том что это бесконечно прекрасно.

            Потому что у пыховцев до сих пор нет красивого способа переиспользования кода за пределами фреймворка
            Ответить
            • > вместе с autoconf всякими
              Это называется "используют autoconf", и не вместе, а вместо. То что система сборки генерирует мейкфайлы - это детали реализации.
              Ответить
              • какая науй разница?

                важно что ./configure && make работает
                и пофиг кто писал мейк файл -- программист или скрипт
                Ответить
                • Ты какую-то дичь задвигаешь. Ты говоришь, что мейкфайлы волшебны, но в чем заключается их волшебность, если их никто непосредственно не использует, не пишет их и даже не заглядывает в сгенерированное?
                  Ответить
                  • Волшебность заключается в том, что с помощью них можно подключать либы и переиспользовать код. Попиши немного на пхп, попробуй создать либу, не привязанную к конкретному фреймворку и ты поймешь
                    Ответить
                    • С помощью мейкфалов нельзя подключать либы. Тебе ниже объяснили, почему -l<libname> недостаточно.
                      Ответить
                      • С помощью мейкфалов можно описывать зависимости между юнитами. Это уже очень много.

                        Тебе ниже уже объяснили что проблема не решаема нигде.
                        Ответить
                        • > Тебе ниже уже объяснили что проблема не решаема нигде.

                          Что значит не решаема нигде? В любом пистоне/раби/жабе можно в setup/гемфайле/pom.xml написать, какие библиотеки каких версий тебе нужны, и всё будет автоматом загружаться и устанавливаться. Написал пару строк в конфиге — можешь юзать либу. В go вообще можно тупо импорт написать, сборщик последнюю версию скачает из интернета.

                          С сишкой в 99.9% случаев нужно будет вендорить и писать собственный билд под каждую зависимость.
                          Ответить
                          • >>В любом пистоне/раби/жабе мо

                            А теперь прокрути на три сообщения ниже и почитай про psycopg в питоне и про jar hell в джаве с кучей разных juit в classpath.
                            Ответить
                            • > А теперь прокрути на три сообщения ниже

                              То, что софт становится трудно переносить, если вдруг приходиться вляпаться в сишку, не означает, что 99% остальных либ не работает как надо.
                              Ответить
                        • > С помощью мейкфалов можно описывать зависимости между юнитами.
                          Но не нужно. Сначала все сорцы конпелируют, а потом скопом линкуют - зависимостей нет.
                          Ответить
      • Объясни пожалуйста в чем проблема поставить у пакета депенденси на libудобная-библиотека-devel

        Потом сделать #include<libудобнаябиблиотека.h>
        и потом передать сборщинку -lудобнаябиблиотека
        ?
        Ответить
        • > в чем проблема
          В винде.

          Ну и мейнтейнеры дистриба не всегда положат тебе нужную версию удобной библиотеки.
          Ответить
          • Замечательно)

            В таком случае никакой ЯП не решает приведенных тобою проблем.
            Ответить
            • Во многих языках (петон, раби, раст, ноджс) есть пакетный менеджер, позволяющий притащить нужные зависимости независимо от дистрибутива. А в го просто все зависимости с собой таскают в папке vendor.
              Ответить
              • ну давай-ка поставь мне клиента Postgres к питону)) А особенно поставь мне его на винде)

                А потом расскажи как он "поставит в независимо от дистрибутива".
                Ответить
                • Ну правильно, питонцы ниасилили python-only драйвера к СУБД (в отличие от той же жабы, где половина дров - прямо на жабе), вот пусть и страдают с нативщиной.
                  Ответить
                  • О, жаба! Отличный пример!

                    Мавен, градл, зависимости, никакого нативного кода.

                    А знаешь что бывает когда у тебя три либы зависят от трех разных junit?

                    У тебя в класс пасе оказывает три разных junit. Догадываешься что потом бывает?
                    Ответить
                    • > класс пасе
                      Класс пас - говно. Как и любая другая идея о path (path, library path, inclede path и т.п.).
                      Ответить
                    • > У тебя в класс пасе оказывает три разных junit

                      Не оказывается. maven/gradle и прочие смотрят весь граф зависимостей и выбирают одну версию каждой либы. Если у тебя в classpath оказалось три разных версии — ССЗБ.
                      Ответить
                • > поставь мне клиента Postgres к питону

                  У проблем с установкой на венду postgres-клиента питона и какого-нибудь lxml одинаковый источник — отсутсвие возможности нормально переиспользовать сишные библиотеки, на которых основаны змеиные реализации.
                  Ответить
                  • Интересно, если тот же драйвер для постгри переписать на питон без нативщины, насколько сильно это скажется на производительности?

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

                      Переписали уже и не раз:
                      http://python.projects.pgfoundry.org/
                      https://pypi.python.org/pypi/pg8000

                      Никаких системных либ не надо. Замеры производительности искать лень, но на исходя из здравого смысла должно быть пофигу, ибо сеть.

                      Зато в теории в пистоне можно более удобную асинхронную версию драйвера написать.
                      Ответить
                      • > более удобную асинхронную версию
                        Ну психопг2 вроде как умеет несколько параллельных запросов по одному сокету (что подразумевает неблокирующие запросы). Так что на нём тоже можно асинхронную версию слепить.
                        Ответить
                  • Ну то-есть мы признаем что модули питона точно так же зависят от системных библиотек, как и "модули" сей, правда?
                    Ответить
                    • Кто ж им мешал не паразитировать на сишной либе, а самим сокет открывать? Протокол вроде не закрытый. Но скриптушки такие скриптушки...
                      Ответить
        • В том, что в твоей федорочке libудобная-библиотека-devel может привезти инклуды в одно место, а в моей убунточке libудобная-библиотека-dev - в совсем другое. И оба этих места могут отсутствовать в дефолтных путях для поиска инклудов.
          Это конечно не проблема, потому что есть системы сборки, которые сами все найдут и в опции компилятора добавят, но ты об этом не сказал. Мне почему-то кажется, что ты на практике не делал сборку для чего-то крупнее хеловорлда.
          Ответить
          • Ровно для этого существует понятие "портирование" и autoconf, о котором было сказано выше.

            Мне почему-то кажется что ты на ЛОРе начитался что "сишечка говно" и повторяешь эту чушь как попугай
            Ответить
              • > автоконф - тоже говно
                Не просто говно, а говно, которое генерит говно на основе говна сгенерённого говном, генерящее говно на основе говна...

                З.Ы. Но более переносимого говна, чем автоконф, походу, не существует.
                Ответить
                • Внезапно мне нравится как сделано у бздунов. Их система (bsd make) делает код переносимым между двумя версиями одной и той же ОС в отличие от автоконфа, зато Makefile выглядит примерно так (пишу по памяти, но смысл примерно передам):

                  PROG=pituh
                  LD_ARGS=-lPitushok
                  #include<bsd.prog.mk>


                  После чего make install все сама делает: и компилит с правильным include и линкует и маны инсталлирует.

                  Такая же есть для портов.

                  Разумеется, работает только на той ОС, для коей сделано: не переносимо даже между openbsd и freebsd
                  Ответить
          • > федорочке
            > убунточке
            А в штабильном дебьяне вообще какое-нибудь говно 5 летней давности будет лежать вместо ожидаемой версии...
            Ответить
            • Да и в свежих дистрибутивах нужного часто нет. И если мелкую библиотеку можно таскать прямо с программой и статически линковаться, то с бустом такой фокус провернуть сложно.
              Ответить
          • > а в моей убунточке в совсем другое

            Более того, в разных релизах бубунточки пакеты могут называться по-разному или иметь разную структуру. Например, в новом релизе кто-нибудь может решить разбить один пакет на 2 или 3. Мы писали софт под определённый дистрибутив и платформу, и всё равно огребали кучу работы каждый раз при миграции на новый LTS.

            autoconf/cmake может помочь найти хедеры и собранные либы, но до этого их надо, очевидно, собрать и установить. Если пишешь какой-нибудь опенсорс, это норм, пакетные менеджеры разрулят.
            А если хочется герметичных и воспроизводимых сборок — только вендоринг и написание собственных билд-скриптов для каждой зависимости.
            Ответить
            • >Мы писали софт под определённый дистрибутив и платформу, и всё равно огребали кучу работы каждый раз при миграции на новый LTS.

              Расскажи поподробнее.
              Меня удивляет как в 201х можно написать софт непортируемый между убунтами.
              Ответить
                • И что, много полезных либ дропают?
                  Всё-таки интересно услышать реальные примеры.
                  Ответить
                      • Потому и зеленым.

                        Ну слушай, между LTSами вполне может случиться чото: например могут openssl заменить на libressl или хедеровые файлы могут переехать
                        Ответить
                        • >openssl заменить на libressl
                          sudo apt install openssl

                          Или какой толк от этой убунты? Проще тогда на слаке сидеть и в билд-скрипте херачить для каждой нужной либы
                          git clone https://gitlab.com/tsar/libPituh
                          cd libPituh && git reset --hard 10.0.500
                           ./configure && make && make install


                          >хедеровые файлы могут переехать
                          Тут да.
                          Ответить
                          • Билд скрипты (если ты про slack builds) не делают clone: там надо сначала руками скачать сырцы а потом запусить slack build: он скопелирует правильно, соберет tgz и его можно потом installpkg:)

                            Скачивают порты у BSD и всякие арчи/генты
                            Ответить
                            • Дык это же самые обычные скрипты, кто мешает туда первой строкой clone и checkout нужного коммита въебать?
                              Ответить
                                • Потому если вписать прямые ссылки, есть опасность что завтра M$ купит гитхаб и начнёт распространять модифицированные коды!
                                  Ответить
                                    • Ну если делать git reset --hard на тег или версию, то никакое sha не спасёт.
                                      Ответить
                                      • Попроси, чтобы тег подписали PHP PGP и проверяй подпись.
                                        Ответить
                                      • Я имел ввиду что скрипт знает sha того, кого скачивает.
                                        Если sha другое значит там что-то испортили.

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

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8