Александр Шульман @developer
Развиваю ИТ
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Chief Executive Officer (CEO)
Lead
From 3,000,000 ₽
Project management
Negotiation
Development of tech specifications
Agile
Development management
Optimization of business processes
Organization of business processes
Building a team
Strategic planning
Business development
читать если нужно напишу подробней, просто спроса не было.
>>Простого (и более быстрого, чем с перехватом) способа, ИМХО, не будет. Можно запретить в шаблоне любой вывод, сразу начинать его с "<?php..." и отказаться от всех echo в пользу $RESULT.="..."
вот что-то такое я как-то думал сделать с прекомпиляцией, но слишком много нюансов =)
ob_start();
$result = ob_get_contents();
Проблема в том, что функции перехвата потока вывода сильно медленно работают!
посмотрел ваш фраймворк и наскидку вижу что логика очень прозрачная — это плюс, но много сущностей плодите — это минус, простите если ошибся.
если воспроизвести такой код:
<?
error_reporting(E_ALL);
echo $a;
$a=null;
echo $a;
?>
то получим только один Notice, тоесть я ошибся выше и скрипт не будет вам кидать нотис на строке $this- > undefined; кидать такой нотис нужно самому используя trigger_error, определяя место вызова из debug_backtrace();
Знаете, кстати, если б вы инклюдили шаблон внутри метода, предварительно сделав:
что-то вроде:
foreach $this->allVars as $k=>$v
$$k=$v;
как я писал выше. то получили бы и нотис автоматически на строке <?php echo $title ?>
если переменная не зарегистрирована.
нужно не проверять запрещенные вещи, а пропускать разрешенные!
— да (последний оконченный, ну с которого я ушел рекламно ресселерская сеть, с нагрузкой 600хитов(просмотров) в секунду, должность тимлидер, 7 человек команда).
Если да, то менялись ли у вас разработчики (хотябы 1, 2 в год).
— да (менялось 4 человека, 3 ушло 4 пришло за год)
Если да, то использовали ли вы там альтернативные самописные решения.
— Да, уровень абстракции доступа к БД, RPC модули
Если да, то не возникало ли ни у кого никаких проблем с этим?
— Да возникли, но мы работал и в системе экстремальное программирования, в частности программирование в парах и человек который не смог разобраться оказался не коммуникабельным и ушел из проекта, остальные 3 остались.
в итоге с проекта ушли фактически все, кто занимался им в начале (остался один!, остальные с новой командой). Проект успешен, работает и расширяется.
я считаю что боязнь перед использованием собственных разработок в коллективе прежде всего из за плохой коммуникации. Улучшайте среду общения и будет лучше! что стоят 10000 строк вашей документации если у новичка есть конкретная проблема? а что если эта проблема ранее не обсуждалась? ждать нового релиза, рыться в кодах готового продукта (который часто выглядит черным ящиком)?
в целом я ЗА использование готовых решений, но иногда это не оправдано.
В частности не оправдан страх научить других людей пользоваться вашим решением, если решение работает, и нормальный код, то даже документация большинству не понадобится
Колоночная верстка, выводится 2 или 3 колонки каких-то параметров в зависимости от их количества. Провести базовые арифметические процедуры в смарти очень не удобно! а на нативном коде делаются очень просто. Эта проблема решена в квики (Quiky)
технология php проверена и обкатана, а изучить синтаксис PHP на уровне вывода переменных не труднее чем выучить синтаксис Smarty
assign($varName,$value, $isProtect=true){
if ($isProtect)
$value = escape($value);
}
Вообще в этих вопросах скорости работает такое правило: смарти (несмотря на всю свою кривизну, громоздкость) популярен потому что на вывод шаблона тратится 2-10% времени редко больше.
из своей практики могу сказать результаты тестирования:
Простые шаблоны
генерация шаблонов:
Q AVG: 0.16 сек
S AVG: 0.18 сек
P AVG: — сек
вывод шаблонов:
Q AVG: 0.0064 сек
S AVG: 0.0065 сек
P AVG: 0.0022 сек
Сложные шаблоны
генерация шаблонов:
Q AVG: 0.19 сек
S AVG: 0.54 сек
P AVG: — сек
вывод шаблонов:
Q AVG: 0.0072 сек
S AVG: 0.0231 сек
P AVG: 0.0038 сек
AVG — среднее время на замере (1000 замеров)
Тестировалось на рабочем сервере FReeBSD Core2Duo 2.0 Ghz, думаю остальные параметры не так важны, да и не помню я их уже.
генерация шаблонов — имеется ввиду компилирование.
S- smarty
Q- Quiky
P — PHP
Нужное выделил
а не привести к коротким тегам, это уж дело вкуса.
второе:
как правило когда нужно выводить «чистые» данные вы знаете это в моделе (практика подтверждает)
и в конце концов вы всегда можете использовать оба механизма.
в большенстве случаев этого хватает, но на всякий случай замечу, что переменная может быть определена и иметь false, потому полезно генерировать стандартное уведомление.
а вообще функции для работы с буферами часто пишут так что они возвращают null: