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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Разрешите ситуацию

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: передача объекта в параметр
metra
Отправлено: 24 Сентября, 2011 - 11:16:19
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Предположим

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 и пр.)?

(Отредактировано автором: 24 Сентября, 2011 - 11:17:00)

 
 Top
OrmaJever Модератор
Отправлено: 24 Сентября, 2011 - 12:07:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ну дак зделайте сылку
PHP:
скопировать код в буфер обмена
  1. function render(&$m_template_)  { ...


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 24 Сентября, 2011 - 12:22:56
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




вставляется всегда ссылка не надо ничего добавлять


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
metra
Отправлено: 24 Сентября, 2011 - 15:00:41
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Т.е. не нужен знак & вначале объекта?
 
 Top
caballero
Отправлено: 24 Сентября, 2011 - 15:04:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




в PHP5 не нужен
объекты и так передаются через ссылки


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
metra
Отправлено: 24 Сентября, 2011 - 15:50:00
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




caballero, спасибо, видимо прощелкал этот момент в ООП.
(Добавление)
Вообще как подход с написанию фреймворка только для себя (изначально так задумывалось) - для более быстрой разработки и последующей доработки сайтов клиентских?

Т.е. создается объект главный - page, далее создаются и рендерятся все блоки, при чем если в блоке есть вложеные блоки, там происходит так же, только за главный объект уже выступает блок-родитель, далее рендерится (выводится на экран просто) что получилось в итоге, ибо каждый блок когда рендерит возвращает объекту-родителю html код.
 
 Top
metra
Отправлено: 25 Сентября, 2011 - 22:56:10
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Хотелось бы услышать мнение профессионалов, кто не раз сталкивался с реальными фреймворками самописными.
 
 Top
caballero
Отправлено: 25 Сентября, 2011 - 23:23:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Профессионалы стараются не сталкиватся с чужими самописными фреймворками
они либо юзают профессиональные фреймворки либо пишут свои


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

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

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

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

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

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

кроме этого там еще убогое подобие дебильного MVC


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
metra
Отправлено: 25 Сентября, 2011 - 23:33:14
Post Id



Гость


Покинул форум
Сообщений всего: 85
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




caballero, спасибо, попытаюсь реализовать до конца данный концепт. Я немного измененную суть моего концепта, описанного в первом сообщении прорабатывал на стадии "каракули в тетрадке аля проектирование", но счел данный способ нелогичным, обратное мнение пришло сейчас только.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB