PHP: Бей шаблоном! Никита "red_way" Кислицин Xakep, номер #058, стр. 058-094-3 Любые обработчики массивов текстовой информации, косвенно или прямо, но все же используют теорию конечных автоматов. В двух словах ее можно описать следующим образом: информация обрабатывается посимвольно и на основе множества правил для различных символов или последовательностей символов "автомат" (устойчивое среди программистов выражение) переходит в различные состояния (которые обычно идентифицируются некоторой переменной). Число состояний конечно, а значит, для каждого из них можно создать еще по правилу. Так, переходя от символа к символу и из состояния в состояние, "автомат" совершает некоторые действия - при этом ему совершенно не надо держать в памяти весь текст, достаточно нескольких байт. Естественно, класс задач, решаемых таким образом, довольно узок, но все лексические обработчики так или иначе используют идеи этой теории. Более того, я уверен, библиотеки регулярных выражений функционируют как раз на базе этой теории. Пример кода <? include "class.FastTemplate.php"; /* Подключаем главный файл шаблонной системы */ $tmpl=new FastTemplate("."); /* Создаем новый экземпляр класса FastTemplate */ $tpl->define(array("top" => "top.tpl", "doc"=>"doc.tpl")); /* Привязываем имена файлов к символическим именам шаблонов */ $tpl->assign(array("NAVIGATION" => "Here is menu...", "MAIN" => "Here is text", "NEWS" => "Here are some news...")); /* Присваиваем переменным шаблона body значения, на следующем шаге обрабатываем этот шаблон */ $tpl->parse("BODY", "doc"); $tpl->parse("TOP", "top"); /* Парсим шаблон верхнего уровня */ $tpl->FastPrint(); /* Выводим юзеру результат. Эта запись равносильна следующей: $tpl->FastPrint(TOP), т.е. функция принимает в качестве параметра имя переменной с результатом */ ?> Вышел PHP 4.3.3! После долгой и изнурительной работы программистов и бета-тестеров, наконец-то вышел полноценный релиз PHP 4.3.3. Основные изменения: * Переписаны многие функции по работе с сокетами * Исправлено множество ошибок, приводящих к buffer overflow * Прикручены новые версии библиотек Expat (1.95.6), PCRE (4.3), GD (2.0.15) * Переписаны функции по работе с протоколом IMAP и некоторыми базами данных * Исправлено более сотни разнообразных глюков :) Итог: бета-тестеры постарались на славу. Пока слышал только положительные отзывы об этой версии, так что must have. |