All streams
Search
Write a publication
Pull to refresh
37
0
Александр Шульман @developer

Развиваю ИТ

Send message
Хинт принял, проверю, учту. Спасибо
поподробней подалуйста что вам не нравится в механизмах рефлексии PHP!
читать если нужно напишу подробней, просто спроса не было.

>>Простого (и более быстрого, чем с перехватом) способа, ИМХО, не будет. Можно запретить в шаблоне любой вывод, сразу начинать его с "<?php..." и отказаться от всех echo в пользу $RESULT.="..."

вот что-то такое я как-то думал сделать с прекомпиляцией, но слишком много нюансов =)
даже так? я не знал, предложу! да чего там, он наверняка это и сам увидит! спасибо за решение!
все верно, видимо у вас «большая» компания, а у меня маленькая (менее 100 человек) была у нас непростительно много времени уйдет на формирование документации, проще на словах или прямо в коде описать исключения. Все эти методы привязаны к маштабу. Когда маштаб большой и нужно координировать много народу, то другие приемы работают.
нотисы генерируйте =) а не заглушки данных.
Кстати!!! килограмм Кармы тому кто придумает избавиться от
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 ?>
если переменная не зарегистрирована.
абсолютно верно!
нужно не проверять запрещенные вещи, а пропускать разрешенные!
ну да, я согласен. просто с джавой щас работаю — смешалось немного
вплане ошибку?
спорно… что такое не существующий шаблон? отсутствие запланированного вывода. не поставите try-catch будет ошибка — логично.
Учавствовали ли вы в больших проектах (4-5 человек) длительное время (более года)
— да (последний оконченный, ну с которого я ушел рекламно ресселерская сеть, с нагрузкой 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
смотрим документацию и коментарии и видим, что присвоение переменной null эквивалентно уничтожению переменной (фактически данных нет, но есть контейнер).
я б null возвращал, ибо попытка вывода несуществующей переменной — колокольчик о том, что там ошибка в логике (ошибочное предположение существования), опечатка, и вы так получите нотис!
очевидно вы не поняли что имеется в момем первом положении. Суть в том чтоб избавиться от <?php echo $this->title
Нужное выделил
а не привести к коротким тегам, это уж дело вкуса.

второе:
как правило когда нужно выводить «чистые» данные вы знаете это в моделе (практика подтверждает)
и в конце концов вы всегда можете использовать оба механизма.
«Магический» метод __get возвращает значение переданной в шаблон переменной. Если переменная не определена, возвращает false. В зависимости от параметров, переменные перед отдачей могут обрабатываться.


в большенстве случаев этого хватает, но на всякий случай замечу, что переменная может быть определена и иметь false, потому полезно генерировать стандартное уведомление.
а вообще функции для работы с буферами часто пишут так что они возвращают null:
fucntion __get($k){
     if (isset($this->vars[$k]))
          return $this->vars[$k];
    return null;
}

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