Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Разрешите ситуацию
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Разрешите ситуацию

Страниц (1): [1]
 

1. metra - 24 Сентября, 2011 - 11:16:19 - перейти к сообщению
Предположим

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class m_template
  4. {
  5.         private html;
  6.        
  7.         function __construct($tpl_file_)
  8.         {
  9.                 $this->html = file_get_contents($tpl_file_);
  10.         }
  11. }
  12.  
  13. class visual_component extends m_template
  14. {
  15.         function render($m_template_)
  16.         {
  17.                 // тут код шаблонизации, т.е. замены шаблона блока на переменную в шаблоне-предке который заканчивается вот этим:
  18.                 $m_template_->html = $new_m_html;
  19.         }
  20. }
  21.  
  22. $page = new m_template("views/index.tpl.php");
  23. $block1 = new visual_component("views/block1.tpl.php");
  24. $block1->render($page);
  25.  
  26. // тут еще много блоков - все, которые будут на данной странице.
  27.  
  28. // тут функция объекта $page, которая выводит св-во html.
  29.  
  30. ?>


При этом у меня вопрос - если я каждому объекту $block1, $block2 и пр. в функцию render вставляю ранее созданный объект $page, то туда вставляется его копия, или он сам, или ссылка? Мне нужно, чтобы в каждом методе render каждого объекта $block1, $block2 и пр. объект $page оставался одним и тем же, ибо в каждом таком методе св-во объекта $page обновляется (сначала на {block1} вставляется шаблон объекта $block1, на место {block2} вставляется шаблон объекта $block2 и пр.)?
2. OrmaJever - 24 Сентября, 2011 - 12:07:55 - перейти к сообщению
ну дак зделайте сылку
PHP:
скопировать код в буфер обмена
  1. function render(&$m_template_)  { ...
3. caballero - 24 Сентября, 2011 - 12:22:56 - перейти к сообщению
вставляется всегда ссылка не надо ничего добавлять
4. metra - 24 Сентября, 2011 - 15:00:41 - перейти к сообщению
Т.е. не нужен знак & вначале объекта?
5. caballero - 24 Сентября, 2011 - 15:04:21 - перейти к сообщению
в PHP5 не нужен
объекты и так передаются через ссылки
6. metra - 24 Сентября, 2011 - 15:50:00 - перейти к сообщению
caballero, спасибо, видимо прощелкал этот момент в ООП.
(Добавление)
Вообще как подход с написанию фреймворка только для себя (изначально так задумывалось) - для более быстрой разработки и последующей доработки сайтов клиентских?

Т.е. создается объект главный - page, далее создаются и рендерятся все блоки, при чем если в блоке есть вложеные блоки, там происходит так же, только за главный объект уже выступает блок-родитель, далее рендерится (выводится на экран просто) что получилось в итоге, ибо каждый блок когда рендерит возвращает объекту-родителю html код.
7. metra - 25 Сентября, 2011 - 22:56:10 - перейти к сообщению
Хотелось бы услышать мнение профессионалов, кто не раз сталкивался с реальными фреймворками самописными.
8. caballero - 25 Сентября, 2011 - 23:23:12 - перейти к сообщению
Профессионалы стараются не сталкиватся с чужими самописными фреймворками
они либо юзают профессиональные фреймворки либо пишут свои


у вас странным образом написана архитектура
с какого перепугу клас блока наследует клас темплейта страницы и тупо его перезатирает

клас темплейта страницы должен ВКЛЮЧАТ в себа клас блока

то есть создали екземпляр класса страницы и загрузили шаблон страницы

долее класс страницы рендерит темплейт
натыкается на вставку блока что нибудь типа {menu2}
создает этот блок (например по его названию) $blok = new Menu2 )

вызывает рендеринг блока
$block->render( а здесь можно передать например атрибуты с вставки к примеру такой {menu2 size=5} хотя можно и в конструкторе);
запрашивает у блока результат рендеринга и втыкает это кусок html на то место где был блок
$htmlblok = $block->getContent;
str_replace( {menu2}, $htmlblock);

примерно по такой схеме работает Joomla

кроме этого там еще убогое подобие дебильного MVC
9. metra - 25 Сентября, 2011 - 23:33:14 - перейти к сообщению
caballero, спасибо, попытаюсь реализовать до конца данный концепт. Я немного измененную суть моего концепта, описанного в первом сообщении прорабатывал на стадии "каракули в тетрадке аля проектирование", но счел данный способ нелогичным, обратное мнение пришло сейчас только.

 

Powered by ExBB FM 1.0 RC1