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

    +147

    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
    Мой скромный говнокод для любителей фильтрации и xss
    При записи в базу 
    $msg = stripslashes(htmlspecialchars(trim($_POST['msg']))); // Очищаем от мусора
    Вывод из базы 
     
    function post($text, $html=true, $nl2br = true, $smiles = true, $bbcode = true) 
    {
     if ($html)
     {
     $text=html_entity_decode($text, ENT_QUOTES, 'UTF-8'); // в базе в htmllenties обратная перекодировка
     }
     if($smiles)
     { 
     $text = smiles($text);
     }
     if($bbcode)
     {
     $text = bbcode($text);
     }              
     if($nl2br)
     {
     $text = nl2br($text);
     } 
     
     return $text;
    }

    Недавно нашел в своем скрипте блога )

    Запостил: Danis92, 09 Ноября 2010

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

    • ну без кода вызываемых функций даже не смешно.
      а вот это $msg = stripslashes(htmlspecialchars(trim($_POS T['msg']))); классика ГК. что уже тоже не смешно.
      Ответить
    • процедурный стиль уже отбивает интерес
      Ответить
      • ООП в пыхе отбивает все желание.
        Ответить
        • да, реализация обьектной модели оставляет желать лучшего, может быть, все таки пхп 10 сделают нормальным языком?
          но все же ооп-стиль лучше тем, что не перекроем такие очевидные => часто используемые имена функций + логически упорядочим
          Ответить
          • в принципе найм спейсы бы облегчили жизнь. Но разработчики только реализовали их сразу грозятся убрать. Бида бида с этим похапе.
            Ответить
            • вот вот. с такой обратной несовместимостью, лучше бы язык пригладили да баги пофиксили, и костыли бы поубирали.
              Ответить
              • А чем статик-методы не замена неймспейсу? Или в ПХП неймспейсы позволяют без "префикс::" писать (сорри, не знаю про неймспейсы в ПХП)?
                Ответить
                • > А чем статик-методы не замена неймспейсу?
                  вот ведь сравнили несравниваемое. В неймспейсе ведь классы, а не методы.

                  в общем, пока эта чехарда с неймспейсами, остаемся с Zend Conventions типа класс в пакет/подпакет/класс.пхп называется пакет_подпакет_класс
                  Ответить
                  • Я относительно исходного поста. В данном случае без разницы - тут все равно не ООП.

                    //Я не знаю как сделаны неймспейсы в ПХП, потому рассуждаю считая что они реализованы аналогично С++.

                    Итак, если начальному автору надо будет инкапсулировать свои функции (напрмер, внезапно окажется что они пересекаются с функциями другого автора), то он может это сделать либо обернув их как статические методы в некий "псевдо"класс
                    class CC{ static function f()...}
                    либо как неймспейс
                    namespace СС; function f()...

                    и в любом случае обращаться к ф-ции как CC::f().

                    Повторю, тут я могу ошибаться (напрмер, может в ПХП нельзя засовывать в неймспейс функции?), но в данном случае у неймспейса преимущество только в том, что его можно раскидать по разным файлам, и (возможно) если в ПХП есть такая штука типа using namespace CC; - и дальше писать без префикса CC:: - тогда автору свой код вообще почти переделывать не придется.

                    Если же префикс все равно надо писать - тогда использование неймспейса (равно и класса) практически ничем не отличается от обычного ("буквенного") префикса.

                    Ну и разумеется, если писать изначально в ООП-стиле, да с соглашениями об именах - тогда никакого вышеуказанного бреда делать не придется.
                    Ответить
                    • в похапе просто указываешь
                      namespace cc;
                      и всё что ниже относится к "сс"
                      при обращении к функциям/методам, пишешь:
                      $foo = сс\bar();
                      там где планируется использовать "сс" по умолчанию, пишешь:
                      use cc;
                      и далее:
                      $foo = bar();
                      --
                      но это только с 5.3 версии...
                      Ответить
                      • Да, получается самое то для любителей функций.
                        Ответить
                  • >>пакет/подпакет/класс.пхп называется пакет_подпакет_класс
                    прикольно наверное перенести пару пакетов в другие пакеты

                    или например класс в пакете com.example.model.users
                    Ответить
                    • да, в пхп с рефакторингом всегда было плохо
                      Ответить
                      • в условиях отсутствия статической типизации с ним вообще плохо.))
                        Правда, phpstorm например умеет цеплятся за phpdoc и имена переменных, и у него иногда получается сделать rename method.
                        Ответить
    • показать все, что скрытоЯ еще не на том уровне чтобы делать свои проекты на ООП. Да и проекты у меня небольшие так что смысла внедрения ООП не вижу ,
      $msg = stripslashes(htmlspecialchars(trim($_POS T['msg']))); // Очищаем от мусора
      Это перед записью в базу ,при записи в базу еще использую mysql_real_...
      При выводе обрабатываю строки функцией описанной выше post($post['msg']);
      Вообще подумываю на другие веб языки переходить ,какие можете посоветовать?
      Ответить
      • stripslashes - а зачем это?

        > Вообще подумываю на другие веб языки переходить ,какие можете посоветовать?
        Перл вам в помощь, не трудно будет перейти, основы вы уже освоили.
        Ответить
      • > Вообще подумываю на другие веб языки переходить ,какие можете посоветовать?
        --
        Есть такой замечательный язык - HTML
        Ответить
        • Вообще то я имею ввиду веб языки программирования ,а не язык разметки ,который я уже хорошо знаю. Родину защищать дело конечно благое если призовут пойдем .Веб-программирование для меня как хобби .
          Ответить
      • Зачем тебе другие веб-языки? Есть такая профессия родину защищать. Судя по нику, скоро придется ;-)
        Ответить
        • программируя ПВО?
          Ответить
          • А что будет, если всё будет полностью компьютеризованным, а обезьянки начнут писать для этого встраиваемый код? Можно подумать, в секретных НИИ будут сидеть сплошь гении. А, учитывая тягу к халяве, будут передавать на аутсорсинг в Индию.
            В итоге, если на экране более пяти объектов - работать не будет, потому что больше фантазии у разработчика не хватило. У ракеты жёстко прописанная в коде координата - дача тёщи.
            Достаточно вспомнить байку с полётом над Мёртвым морем. Программные ошибки такого рода могут стоить очень дорого.
            Ответить
            • > У ракеты жёстко
              как говорят в пентагоне - это не ракета, а самолет, просто кажется, что ракета :)
              Ответить
              • якая страна -- такие и теракты
                Ответить
                • опаньки, это я не специально :)
                  я про сегодняшний пуск, про который решили, что показалось :)
                  хотя к прошлому разу подходит идеально
                  Ответить
              • Да, да...
                "Это не говнокод - это продакшн, просто кажется что говнокод", - каждый раз говорят исполнители заказчику...
                Ответить
      • Вообще-то в 18 лет уже можно постигать азы ООП. ))

        переходить лучше на питон. Или джаву например
        Ответить
        • рекомендовал бы джаву как первый язык вместо бейсиков и паскалей. Язык простой, а плохому не учит
          Ответить
          • джава не простой язык, научить может всякому (хотя скорее хорошему), но учица все таки лучше на барсиках.

            пока ребенок не знает, что такое переменная -- нафига его грузить понятиями кучи, стека, сборки мусора, примитивов и врапперов?
            Ответить
            • пока ребенок не знает, что такое переменная, не надо его грузить понятиями кучи, стека, сборки мусора, примитивов и врапперов. Начать кодить можно спокойно и без этих понятий. А потом дойдем и до этого, и расскажем, что за собой надо убирать мусор, а сложные понятия составлять из простых.
              Зато не придется засорять совершенно ненужными знаниями, например, чем в паскакале процедура отличается от функции, какого хрена в васике параметры функции пишем в скобках, а параметры процедуры - без, и какими ключевыми словами заканчивать циклы for, а какими while, где глобальные переменные видны и где нет, и почему все переменные делать глобальными - плохо... ну итыды итыпы
              Ответить
              • да ну)
                сравните
                print "hello world"


                и
                package com.example;
                
                public class Hello {
                  public static void main(String[] args) {
                    System.out.print("Hello world");
                  }
                }


                что проще?
                Ответить
                • ой, не ворошите тухлые холивары. две лишние строчки не значит, что на 1000 строчек бейсика придется 2000 джавы. Кроме того, пример можно поместить в дефолтный пакет и первую строчку не писать.
                  Зато в жабке даже с этим хелловорлдом, отпадают неясности типа: где виден код, куда напечатает, что придет на вход.
                  Основы основ лучше обьяснить ребенку сразу -- мы же не хотим вырастить очередного кодобабуина, пусть попыхтит, посоображает, поусваивает побольше
                  Ответить
                  • да ну перестаньте. ему надо с самого начала понимать, какого типа переменная, какие операторы для нее определены и на каком уровне вложенности она находится. это закаляет дух. потом - ассемблер, чтобы не расслаблялся. дальше - внезапный ООП во все поля. потом - курс ФЯП и ЛСД. одновременно.

                    после этого человек обретет просветление и отправится доживать свой век в бутане.

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

            http://local.joelonsoftware.com/mediawiki/index.php/Опасности_обучения_на_Java например
            Ответить
            • как печально. Выкормыши Java настолько отупели от жабьих лапок, что им никогда не осилить функционального программирования, лямбд, замыканий... Люр рыдахо.

              а меж тем, я полагал, что паскаль и васик устарели и полны других ложных "проблем", которые в жабке как раз отсутствуют
              Ответить
              • лямбд, замыкани... функторов, стрелочек, морфизмов, теорката
                Ответить
                • ...советов, декораторов...
                  Ответить
                  • и? для этих игрушек даже мозг не нужно включать. с той же легкостью диаграммку не нарисуешь.
                    Ответить
            • Кажется программированию нужно начинать обучать с алгоритмов (как у меня раньше это слово вызывало гастрит, и как теперь я это люблю)...
              Ответить
              • а практика на чем? не на IDL же
                Ответить
                • ...а потом про что-то вроде uml рассказать. А потом рассказать про языки программирования. А потом помочь с их выбором.
                  Вобщем начинать нужно сверху, а не снизу как сейчас принято.
                  --
                  (имхо)
                  Ответить
                  • да чего уж там UML.
                    Один день про красно-черные деревья. Второй -- про паттерн visitor.

                    и ребенок конечно поймет и полюбит программирование)))

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

                    нельзя учить УМЛю пока человек не понял ЗАЧЕМ он ему нужен
                    Ответить
                    • если не ошибаюсь, с 85 года есть нормальный учебник по программированию.
                      ну а ооп перед алгоритмами - 'дожили..' называется.
                      на работе классики в умл рисовать вместо решения прикладных задач?
                      матчасть первична, а не оопы/паттерны/хуяттерны
                      Ответить
                      • да, пожалуй что я погорячился: алгоритмы и структуры первее.
                        Правда, я бы разделил их на две части: основные (не сложнее бинарного поиска и сортировки пузырьком) и сложные (уровня Кнута))).
                        Вот первые бы я учил до ООП, а вторые можно и параллельно.
                        Впрочем, если не хочется ООП -- можно заменить его на нормальное программирование на сях (модульное, а не все-в-кучу).

                        Так уж сложилось, что современный программер больше времени проводит над высокоуровневой архитектурой, чем над реализацией известных алгоритмов, которые есть в библиотеках.

                        Но знать си, и уметь делать quicksort конечно каждый должен уметь.
                        Ответить
                      • если что, тематические книги как минимум с 1960-х издаются
                        "Наука", "Мир"
                        Ответить
                    • > потом по-тихоньку рассказывать про ООП, потом -- про алгоритмы
                      а потом, факультативно, рассказать про алгебру, ага =)
                      Ответить
                      • а я думал что алгебру проходят параллельно, но других занятиях.
                        нет?
                        Ответить
                        • http://farm4.static.flickr.com/3502/3711492240_0876cf5ac7.jpg
                          ваши ученики, тов. луначарский?
                          Ответить
                          • тю. где я сказал что алгебру не нада учить?) просто в ВУЗах же бывают разные дисциплины, нет?P)

                            кстати, я видел написанный макакой билд-скрипт. Это был ant файл (build.xml) на 8000 строк примерно, смоченный ant-contribовыми ветвлениями

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

                              там не макаки, а шимпанзе. я в свое время не потрудился сохранить, а позже возник инцидент с баттхертом сотрудников и эта реклама была выпилена
                              Ответить
                              • хм... http://scienceblog.ru/wp-content/uploads/2009/03/11.jpg
                                и правда шимпанзе.

                                а сотрудников я понимаю: билд-коммандам неприятно поди
                                Ответить
                                • когда макак называют шимпанзе - это типа комплимент
                                  Ответить
                          • Знаете, вот из личного опыта..
                            Хорошая практика - "Как бы ты реализовал такой-то и такой-то алгоритм"... Пока самостоятельно не выявишь все плюсы, дефекты и нюансы - ни черта толком не поймёшь...
                            Теория - оно, конечно круто, но без практики - это пустое.
                            Ответить
                          • http://revansonline.users.btopenworld.com/Media/images/1000monkeys_jpg_jpg.jpg
                            --
                            бек-энд современного интернета...
                            Ответить
            • Спольски в целом прав: без понимания архитектуры компа и математики можно вырастить только быдлокодера.

              но java все таки не самый худший вариант (там хотя бы надо понимать что такое куча и стек, и знать основные структуры данных).

              вот если бы их учили на VBS или PHP -- был бы ад)
              Ответить

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