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

    +154

    1. 1
    2. 2
    3. 3
    foreach ($templatedata as $templatedataname=>$templatedatavalue)
    	$$templatedataname = $templatedatavalue;
    include($templatesDir.'/'.$file.'.tpl.php');

    Велошаблонизатор, превращающий пары ключ-значение из массива в локальные переменные шаблона.
    Шаблон - простой php-файл, в нужных местах выводящий полученные значения (реже с какой-либо логикой вроде обработки массива).

    Запостил: Vindicar, 13 Июня 2011

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

    • Да ладно, для простого проекта сойдёт. Просто и не нужно рыться в куче ООП.
      Ответить
      • php.net/extract
        Ответить
        • А вот подобные вещи в стандартной библиотеке и принесли PHP славу говноязыка. Одно дело, когда неуниверсальный и опасный приём применяют в одном конкретном месте, когда можно гарантировать его безопасность, и совсем другое, когда это предлагают всем пионерам как стандартный инструмент. Впрочем, это в духе PHP, увы.
          Ответить
          • Должен заметить, extract() всё-же поаккуратнее сабжа.
            Ответить
          • знаете, а по-моему, дело не в PHP, или наоборот, он как раз для этого и задуман был.
            посудите сами, какая удобная обработка форм: параметры из формы сами попадают в переменные, потом над ними колдуют, и подставляют результат в шаблон страницы, получая готовую красивую страницу!
            Но ведь пыхоприматы доигрались (не инициалируют и не проверяют) до того, что register_globals стало само по себе опасным - то есть, лечим не причину, а запрещаем следствия.
            Ответить
            • К сожалению, приличной реализации идеи, ради которой задуман PHP, нет.

              Если бы гарантировалось отсутствие конфликта имён параметров формы с именами переменных скрипта (например, разными префиксами) — это бы прокатило. Но в extract это только третий, необязательный, параметр. И поведение по умолчанию не такое. В PHP это правило — есть небезопасный простой и очевидный способ сделать что-то и необходимость отдельно поплясать и поработать головой, чтобы было как надо.
              Ответить
              • ну *почесав репу* в те лохматые годы (FI,3) коллективное сознание еще не выросло до понимания важности неймспейсов (как, например, и в чатах html-теги поначалу разрешали), да и вообще, как я понимаю, пхп не был ориентирован на "публичный веб" (тогда доминировал перл в cgi-направлении).
                Поэтому, несмотря на фундаментальную убогость (те самые огрехи, которые тянутся до сих пор) языка и API, это все же неплохое срество (было) класса reporting services.

                з.ы. Я все мечтаю, когда пхп будет потеснен со сцены "стандарт де-факто серверного программирования", как некогда пхп вытеснил cgi-perl, и хостеры (в т.ч. бесплатные) будут укомплектованы не пхп, а, скажем, java
                Ответить
                • уэбчатики это какой-то пиздец, а не пример
                  ЧСХ, при консервативных настройках PHP чатик и не получится сделать
                  Ответить
                • Ну, жава, это слишком жирно и громоздко, много нужно танцевать ради тривиальной странички. А вот язык, заточенный под генерацию xhtml, столь же простой в простых случаях, но лишённый родимых пятен php (php очень не повезло с автором) — нужен. Но достойной замены не видно и на горизонте.
                  Ответить
                  • <<А вот язык, заточенный под генерацию xhtml.
                    Perl не ?
                    Ответить
                    • Слишком много чёрной магии. PHP изначально как раз выглядел как упрощённый Perl. Ему бы ещё больше последовательности…
                      Ответить
                      • не раз размышляя над данным вопросом, я остановился на мнении, что идеальным был бы язык наподобие Groovy (с тем же замечательно простым жабаподобным синтаксисом, но динамичный), но не компилирующийся в жабабайтокод, что бы не поднимать весь стек инструментов "тормознутой" жабы.
                        Думаю, лучше бы он был подобно питону - на выбор либо интерпретирующийся, либо компилирующийся в натив.
                        Ответить
                    • к тому же (если не прав, поправьте) перл до сих пор работает только как cgi. Пхп как модуль апача в этом случае выигрышнее
                      Ответить
                      • да ладно
                        mod_perl охуителен по сравнению с говнищем, которое даже под фильтры не удалось заточить
                        Ответить
                  • python?
                    Ответить
                    • Нет. Python — замечательный язык, но в этой области ничуть не лучше любого другого ЯВУ общего назначения, и даже в чём-то хуже. Отступы, которые благо для обычных скриптов и больших программ, делают его неприменимым для однострочников и внедрения в xhtml.

                      Нужен xsl с человеческим простым синтаксисом. И чтобы сгенерировать невалидный xml или небезопасно обработать данные было бы так же трудно, как плохо отформатировать код в Питоне.

                      Чтобы любой Вася Пупкин мог написать свой хелловорд, но когда этот хелловорд вырастет до размеров большой системы, были и модульность, и структурность, и контроль данных, и обработка ошибок — без значительного усложнения. О кодировках и эскейпинге и говорить нечего — это должно обеспечиваться автоматически.
                      Ответить
                      • > xsl с человеческим простым синтаксисом
                        позвольте, вам нужен императивный ЯВУ или язык разметки?
                        Ответить
                        • И то, и это. По сути, нужно два совместимых языка — для шаблонов и для обеспечения логики в скриптах. Но с возможностью включать часть логики в шаблоны. Но с возможностью ограничивать используемый в шаблонах уровень.
                          Ответить
                          • звучит противоречиво.
                            Ответить
                            • А шаблонизаторы на PHP — не противоречиво?
                              Ответить
                              • нет.
                                > с возможностью включать часть логики в шаблоны
                                я вообще против такого
                                Ответить
                                • Ну вот если в некой коллекции нет элементов, то выводить одно, если есть — другое. Правильное грамматическое согласование (1 слон, 2 слона, 5 слонов). И т.п.

                                  Если не включать часть логики в шаблоны, то придётся хардкодить шаблоны в код, что не лучше.
                                  Ответить
                                  • в шаблоне должна быть не логика, а данные и языковые конструкции.
                                    посмотрите на jstl
                                    например, что бы не городить код в шаблоне, можно описать новый тег. Например, который, в зависимости от кол-ва выводил бы нужную словоформу. А логику уже бы реализовал обработчик тега на ЯВУ
                                    Ответить
                                    • Ну вот и получается специализированный миниязык. Только более громоздкий, с менее привычным синтаксисом. В этом есть минусы.

                                      Насчёт словоформ — то это как раз языковая конструкция. Изменили шаблон, переформулировали фразы — словоформы ушли и появились. Поэтому сам текст должен быть в шаблоне, а вот конструкция выбора — стандартная.
                                      Ответить
                                      • так вот поэтому и не надо все имплементировать на уровень языка.
                                        Ответить
    • показать все, что скрытоvanished
      Ответить

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