korpus
злой бобёр
ООП - использование одного объекта внутри другого
Разрабатываю архитектуру сайта с использованием ООП. Как мне спроектировать его, чтобы он был правильный с точки ООП?
Допустим, на сайт есть 2 типовых блока, в каждом из которых отображается одна и та же форма.
Класс "block1". Необходим, чтобы вывысти какой-то элемент страницы в браузер.
Класс "block2". Этот класс выводит другой блок данных.
Класс "forma". Необходим, чтобы вывести в браузер типовую форму, используемую во всех блоках (а таких блоков может быть и два и больше). Предположим, что эта форма настолько сложна, что ей необходимо подключаться к базе данных, обрабатывать данные из неё и вообще лучше один раз написать код и использовать его многократно, поэтому она и сделана в виде отдельного класса. Функция print_this() выводит в браузер html-код формы.
Что надо сделать, чтобы в каждом блоке, создаваемом при помощи классов block1, block2 можно было добавить одну и ту же типовую форму?
В данном примере создаваемого сайта классы могут иметь разное назначение (не только чтобы выводить html-код блоков), интересует сама суть разрешения подобных проблем. Какой грамотный подход должен быть?
Я вижу только два решения
1 способ) создавать объект с формой forma в самих классах block1 и block2 и использовать его там. Но так как блоков 2, то 2 раза будут производится одни и те же операции и 2 раза будет подключение к БД.
Пример:
2 способ) Объект класса forma создаётся раньше, чем классы block1 или block2 и передаётся как параметр при инициализации этих классов. при этом один раз происходит подключение к базе данных, что конечно же хорошо.
Пример:
Класс block1 при этом переделывается таким образом:
Насколько второй вариант корректен с точки зрения ООП в PHP5? Можно ли объект глобальный $forma записать в закрытую переменную внутри объета класса block1 и использовать его там, учитывая, что объект $forma будет использоваться в другом объекте класса block2? Что вообще происходит с объектом, если его передать как параметр в функцию другого объекта?
Если способ 2 неправильный, то как надо поступать?
Разрабатываю архитектуру сайта с использованием ООП. Как мне спроектировать его, чтобы он был правильный с точки ООП?
Допустим, на сайт есть 2 типовых блока, в каждом из которых отображается одна и та же форма.
Класс "block1". Необходим, чтобы вывысти какой-то элемент страницы в браузер.
Код:
class block1
{
public function __construct()
{
echo '
<div>';
//Здесь выполняются какие-то операции и что-то выводится на страницу
echo '
</div>';
}
}
Код:
class block2
{
public function __construct()
{
echo '
<div>';
//Здесь выполняются какие-то операции и что-то выводится на страницу
echo '
</div>';
}
}
Код:
class forma
{
public function __construct()
{
//Что-то делается
}
public function print_this()
{
echo '....'; //выводится html-код формы
}
}
Что надо сделать, чтобы в каждом блоке, создаваемом при помощи классов block1, block2 можно было добавить одну и ту же типовую форму?
В данном примере создаваемого сайта классы могут иметь разное назначение (не только чтобы выводить html-код блоков), интересует сама суть разрешения подобных проблем. Какой грамотный подход должен быть?
Я вижу только два решения
1 способ) создавать объект с формой forma в самих классах block1 и block2 и использовать его там. Но так как блоков 2, то 2 раза будут производится одни и те же операции и 2 раза будет подключение к БД.
Пример:
Код:
class block1
{
public function __construct()
{
include_once('forma.php');//подключается скрипт с определением класса forma
$forma=new forma();
echo '
<div>';
//Здесь выполняются какие-то операции и что-то выводится на главную страницу
$forma->print_this(); //выводится форма
//что-то делается
echo '
</div>';
}
}
Пример:
Код:
include('block1.php');
include('forma.php');
$forma=new forma;
$block1=new block1($forma);
Класс block1 при этом переделывается таким образом:
Код:
class block1
{
private $forma;
public function __construct(forma $forma)
{
$this->forma=$forma;
echo '
<div>';
$this->forma->print_this(); //выводится форма
echo '
</div>';
}
}
Если способ 2 неправильный, то как надо поступать?
