Как я могу сделать свой собственный шаблон / движок программирования в php - PullRequest
0 голосов
/ 05 мая 2010

Я некоторое время работал над собственными шаблонизаторами, но я всегда застреваю в таких документах, как

<block : block1>
    <table>
        <block : row>
            <tr>
                <td>
                    {value}
                </td>
                <td>
                    {value2}
                </td>
            </tr>
        </block>
    </table>
</block>

Я могу получить "блок 1" с помощью регулярного выражения, но он сломается в первый раз (один из "строки")

Но я хочу более умный способ (а не с помощью функции, такой как DOM) я думал о чем-то вроде

while($i < strlen($code)){
    if(substr($code,$i,1)){
        //tag is opened
    }
}

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

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

(термины в курсив на самом деле должны быть ссылками в Википедии).

0 голосов
/ 05 мая 2010

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

Лучшее предложение обычно состоит в том, чтобы либо напрямую использовать PHP в качестве языка шаблонов. (это то, для чего изначально был разработан PHP, и строго следуя шаблону MVC, тоже неплохое решение) или попробуйте из существующих шаблонизаторов. Только если вы не можете сделать ни одного из них соответствует вашим потребностям (большинство из них можно расширить с помощью механизма плагинов) ты должен начать делать свой собственный.

...