Почему дублирует содержание в классе (для профи ООП)?
Я написал несколько классов для подготовки информации и отправки ее в родительский класс, для того чтобы получить выходной шаблон HTML:
// Parent class
class FeedTemplate {
public $data = array();
function __construct($data = array()){}
function getTemplate(){
return $this->CI->load->view('socialfeed/template', $this->data, true);
}
}
class ArticleTemplate extends FeedTemplate {
}
class VideoTemplate extends FeedTemplate {
function __construct($data = array()){
parent::__construct($data);
}
function getTemplate(){
$this->data['media'] = $this->CI->load->view('video/video_single', $this->data, true);
parent::getTemplate();
}
}
Создание объектов:
...
case 'article':
$obj = new ArticleTemplate($value);
$this->template.= $obj->getTemplate();
break;
case 'video':
$video = new VideoTemplate($value);
$this->template.= $video->getTemplate();
break;
...
Посмотреть шаблон:
<div class="text"><?=$media?><?=$content['text']?></div>
Проблема в $this->data['media']
- содержимое этой переменной дублируется в остальных шаблонах для другого типа информации. Таким образом, создается шаблон для статьи, потом для видео, далее контент от видео добавляется в остальные шаблоны.
Суть в том, что каждый класс формирует объект данных для передачи его родительского класса, тот возвращает собранный шаблон HTML с этими данными. Все шаблоны конкатенируются в одну строку.
Обновление
Смысл в том, что на входе разного типа информация: статьи, новости, видео. В зависимости от этого, информация передается конкретному классу(Article, News. Video), который подготавливает данные $this->data
и вызывает метод getTemplate()
родительского класса, задача которого эти данные распихать по шаблону и вернуть сам шаблон. Все типовые классы имею одного и того-же родителя FeedTemplate
Обновление
Наследование нужно, чтобы не писать в каждом классе одни и те же методы. Предыдуший мой комментарий, возможно, дает понимание того, что хочу добиться.
Обновление
re: Один и тот же класс не должен одновременно подготавливать данные и заниматься рендерингом. Как раз таки один класс у меня занимается рендерингом, а другие подготавливают данные, а третий - возвращает шаблон. Мешает сделать так, потому как в один класс придется писать кучу переменных и кучу проверок, чтобы эти переменные расфасовать.