Создал шаблонизатор (PHP5) - покритикуйте, похвалите

Volmir

Новичок
Создал класс-шаблонизатор на PHP5 - покритикуйте, похвалите, поправьте, выскажите свое мнение, пожалуйста.

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

Собственно, сам класс:

PHP:
/**
 * Class for parse and show templates
 *
 */
class View
{
	private $_path;
	public $vars = array();

	public function __construct($path = '')
	{
		$this->_path = $_SERVER['DOCUMENT_ROOT'] . $path;
	}
	/**
	 * Set variables
	 *
	 * @param variable name $name
	 * @param variable value $value
	 */
	public function set($name, $value)
	{
		$this->vars[$name] = $value;
	}
	/**
	 * Clear view data
	 *
	 */
	public function clear() {
	    unset($this->vars);
    }
	/**
	 * Parse template
	 *
	 * @param filename $template
	 * @return text
	 */
	public function parse($template)
	{
		if (file_exists($this->_path . $template))
		{
			if (count($this->vars)) {
				extract($this->vars, EXTR_SKIP);
			}

			ob_start();
			include($this->_path . $template);
			$output = ob_get_contents();
			ob_end_clean();

			return $output;
		}
		else
		{
			throw new Exception('The template file "' . $template . '" does not exist');
		}
	}
	/**
	 * Show template content
	 *
	 * @param filename $template
	 */
	public function display($template)
	{
		echo $this->parse($template);
	}
}
И пример его вызова:
PHP:
include_once('lib/view.class.php');

$view = new View('/templates/');

$view->set('title', 'Title');
$view->set('header', 'Header');
$view->set('menu', $view->parse('menu.tpl'));
$view->set('content', $view->parse('content.tpl'));

$view->display('header.tpl');
$view->display('index.tpl');
$view->display('footer.tpl');
И код шаблонов:
PHP:
<!-- begin source of "header.tpl" -->
<html>
<head>
	<title><?php echo $title; ?></title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<!-- end source of "header.tpl" -->

<!-- begin source of "index.tpl" -->
    <?php echo $menu; ?>
    <hr />
    <h1><?php echo $header; ?></h1>    
    <?php echo $content; ?>
<!-- end source of "index.tpl" -->

<!-- begin source of "footer.tpl" -->
</body>
</html>
<!-- end source of "footer.tpl" -->
 

Volmir

Новичок
А так повторюсь, до вас такого еще никто не писал
Я в курсе :) Каждый должен написать свой шаблонизатор рано или поздно :)

Просто читал, что использование функции extract($data) может создать конфликт между внешними переменными и переменными полученными из массива $data (одни перезапишут другие). Но вроде это решается путем добавления опции extract($data, EXTR_SKIP). Что скажете?
Хотелось бы совсем не пересекаться с внешними переменными.
 

Adelf

Administrator
Команда форума
Я написал класс сложения двух чисел. PHP5.
PHP:
class Adding
{
    public function sum($a, $b){return $a + $b}
}

// пример использования
$addingObject = new Adding();
print $addingObject->sum(4, 5);
 

Духовность™

Продвинутый новичок
Флоппик, на каком основании скрыт пост Sokil.Dmytro?

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

$view->set('title', 'Title');
$view->set('header', 'Header');
$view->set('menu', $view->parse('menu.tpl'));
$view->set('content', $view->parse('content.tpl'));
Все set() заменить на магические __set(). Они для подобных ситуаций и предусмотрены.

Каждый должен написать свой шаблонизатор рано или поздно :)
Писать шаблонизатор - удел полного непонимание очевидного факта - PHP является сам шаблонизатором. Мощным, встроенным в сам язык. Ты написал обертку над PHP-шной шаблонизацией. Правильную, в принципе.
 

Volmir

Новичок
Все set() заменить на магические __set(). Они для подобных ситуаций и предусмотрены.
А как освободить память (обнулить переменные) после того, как шаблон пропарсен? Веди теперь (после _set()) они будут переменными класса-шаблонизатора! Обращаться к каждой "поименно"?!

Ты написал обертку над PHP-шной шаблонизацией. Правильную, в принципе.
Конечно, именно это я и хотел написать - обертку над PHP, которая упрощает работу с шаблонами.
 

HraKK

Мудак
Команда форума
Духовность™
Помоему, это флоппик троллит из под 2 аккаунта.

Volmir
ЧУВАК ЗАВЯЗЫВАЙ ДУТЬ ЭТУ ДУРЬ ЧТО КУРИШЬ!!!!!!111 ЛСД НАМНОГО КРУЧЕ ВСТАВЛЯЕТ! Я гарантирую это!!!!!!!ОЛОЛОЛОООООО!!!!!

ОН СЛЕДИТ ЗА ТОБОЙ!
 

Mols

Новичок
Просто сделал человек отдельную область видимости. Ну и функционал для передачи данных в эту область.
HraKK
Похоже мсье таки в курсе, что лучше вставляет...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
удивляюсь, а почему никто не спросил очевидного:
Анахрена?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
и это не шаблонизатор, а хх что такое

мне не отвечать.
я высказал свое мнение

с нетерпением ожидаем продолжения
я создал cms - оцените и тд.
 

Volmir

Новичок
с нетерпением ожидаем продолжения
я создал cms - оцените и тд.
Ага, верно! :)
Собираюсь продолжать именно в направлении создания мини-СМS (для своих нужд по разработке проектов: MVC, до десятка классов в библиотеке, реализация основных функций, ничего лишнего, все быстро работающее и т.п.).
Может, для кого-то это и пройденный этап, а для меня - новый.
Мне нравится!
 

Духовность™

Продвинутый новичок
А как освободить память (обнулить переменные) после того, как шаблон пропарсен? Веди теперь (после _set()) они будут переменными класса-шаблонизатора! Обращаться к каждой "поименно"?!
не пытайся казаться умнее, чем есть.
 

Volmir

Новичок
не пытайся казаться умнее, чем есть.
Спасибо за совет. Я особо на что-то особенное не претендую. А развернутый ответ по освобождению памяти можно?
Если вывод контента страницы осуществлять в конце выполнения скрипта - то обнулять (unset()) переменные не надо (они сами обнулятся при завершении процесса). Но как обнулить переменные, если выводить контент страницы по частям (header, body, footer)?
 

Mols

Новичок
Volmir
обнулять переменные при работе скрипта в рамках http запроса Вам врядли когда нибудь потребуется (если речь идет о памяти).
Но это "не пытайся казаться умнее, чем есть." я тоже не очень понял.
Похоже на "оценку по себе"
 

Sokil.Dmytro

Новичок
Ага, верно! :)
Собираюсь продолжать именно в направлении создания мини-СМS (для своих нужд по разработке проектов: MVC, до десятка классов в библиотеке, реализация основных функций, ничего лишнего, все быстро работающее и т.п.).
ИМХО №1. любой мало мальски серьезный проект задумывался как быстро работающий, ничего лишнего, все по паттернам и парадигмам. В итоге реальная жизнь, колебание настроений и желаний заказчиков, нехватка времени на спланированную разработку превращают такой проект в кучу говна, в которой невозможно разобраться. В результате докупают очередной тазик или переписывают наново код.

ИМХО №2. Освобождение памяти имеет смысл если в шаблон вгружать дико занимающие память данные. Если вы вгружаете такие тяжелые данные в шаблон, вы что-то делаете не так. А от того что вы освободите килобайт памяти на микросекунду раньше чем она сама уйдет в мусорку, легче скрипту не будет

по поводу extract и конфликтов - extract выполняется в области видимости метода parse поэтому ничего существенного он затереть не сможет. просто правтльно подойдите к вопросу
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Вложенность всех данных внутрь vars массива не нужна
 

HraKK

Мудак
Команда форума
да откуда такие олени берутся в 2010 году:((( Я думал они лет 10 назад вымерли(((
 

HraKK

Мудак
Команда форума
Ура, флоппик ушел спать можно фладить!!!!!!!!!!! Да здраствует черный властилин!
 

Volmir

Новичок
да откуда такие олени берутся в 2010 году?
Уже можно сказать почти в 2011 :)

А если серьезно, куда смотрят настоящие лоси программирования сейчас? Просто укажите направление, если можно...

по поводу extract и конфликтов - extract выполняется в области видимости метода parse поэтому ничего существенного он затереть не сможет.
Спасибо, в ближайшее время попробую сделать extract() + мини-тест, перезатираются переменные или нет.

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

Ага, видел этот скрипт год-два назад. Хорошая "шутка юмора"! :)

обнулять переменные при работе скрипта в рамках http запроса Вам врядли когда нибудь потребуется
Да, здесь я излишне перестраховался. Согласен.
 

HraKK

Мудак
Команда форума
настоящие лоси программирования сейчас
Бухают. А не занимаются херней, как некоторые.

Найди себе нормального наставника. Это конечно похвально все что ты тут пишешь, но умерь свой пыл. Ты сейчас подобен 3-х летнему мальчику который радостно прибегает к отцу и говорит что он бабочку словил!!!!!

Лучше постарайся получить тут опыт, чем вывешивать каждое свое "достижение" на рассмотрение общественности. Хотя бы год.
 
Сверху