|
|
|
| Добрый день!
У меня принципиальный вопрос.
Создаю класс WebPage, который отображает страницу: строит базовую таблицу и включает в нее шапку, меню, адрес, контент и копирайт (отдельный файл WebPage.inc).
<?php
class WebPage
{
function Display()
{
?>
<HTML><HEAD>
<META http-equiv="Content-Language" content="ru">
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<LINK href="./FenStyleGlobal.css" type="text/css" rel="stylesheet">
<?php echo $this -> title;
echo $this -> keywords; ?>
</HEAD>
<BODY background="#ffffff">
<TABLE width="100%" height="100%" align="center">
<TR valign="top">
<TD width="100%">
<?php
//Отображение шапки
$this -> DisplayShapka();
//Отображение контента
echo $this -> content; ?>
</TD>
<TD style="border-left: 1px solid #666666">
<TABLE border="0" width="260" align="right">
<TR><TD><?php $this -> DisplayLogo(); ?></TD></TR>
<TR><TD><?php $this -> DisplayMenu(); ?></TD></TR>
<TR><TD height="50"></TD></TR>
<TR><TD><?php $this -> DisplayAddress(); ?></TD></TR>
<TR><TD><?php $this -> DisplayCopyright(); ?></TD></TR>
</TABLE>
</TD>
</TR>
</TABLE>
</BODY></HTML>
<?php
}
// Здесь идут функции, я их не пишу для экономии места:
function DisplayShapka()
{......}
function DisplayLogo()
{......}
// и т.д.
}
?>
|
Все отлично, создаю файл file_name.php,
подключаю файл класса: require('WebPage.inc'), создаю обьект класса и вызываю функцию Display() - страница готова.
Теперь мне необходимо поместить под Шапкой новый модуль (например бланк заказов: Zakaz()).
Можно этот модуль в виде функции или класса поместить в базовый класс WebPage (WebPage.inc), файл страницы с бланком заказов примет вид:
<?php
require('WebPage.inc');
class ZakazPage extends WebPage
{
function Display()
{
?>
<HTML><HEAD>
<META http-equiv="Content-Language" content="ru">
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<LINK href="./FenStyleGlobal.css" type="text/css" rel="stylesheet">
<?php echo $this -> title;
echo $this -> keywords; ?>
</HEAD>
<BODY background="#ffffff">
<TABLE width="100%" height="100%" align="center">
<TR valign="top">
<TD width="100%">
<?php
//Отображение шапки
$this -> DisplayShapka();
[b]$this -> Zakaz();[/b]
//Отображение контента
echo $this -> content; ?>
</TD>
<TD style="border-left: 1px solid #666666">
<TABLE border="0" width="260" align="right">
<TR><TD><?php $this -> DisplayLogo(); ?></TD></TR>
<TR><TD><?php $this -> DisplayMenu(); ?></TD></TR>
<TR><TD height="50"></TD></TR>
<TR><TD><?php $this -> DisplayAddress(); ?></TD></TR>
<TR><TD><?php $this -> DisplayCopyright(); ?></TD></TR>
</TABLE>
</TD>
</TR>
</TABLE>
</BODY></HTML>
<?php
}
}
$a = new ZakazPage;
$a -> Display();
?>
|
Т.е. изменили ф-ю Display(), добавив в нее одну строчку. Таких страниц у меня несколько. Теперь я хочу добавить внизу каждой страницы строчку-ссылку "версия для печати". Нет ничего проще: Добавляем эту строчку в функцию Display() файла WebPage.inc. А в каждый файл с бланком заказа (20 шт.), где переписана функция Display() её добавлять вручную? Теряется вся идея наследования, или я чего-то на понимаю?
Еще функция Zakaz(), всегда присутствует в базовом классе и грузится в месте с файлом WebPage.inc, даже когда она не нужна на странице.
Т.е. может получиться, что в базовом классе я опишу все возможные случаи использования страницы, на деле использоваться будут лишь несколько из них, а осталные - грузятся в холостую?
Спасибо за внимание!
Борис. | |
|
|
|
|
|
|
|
для: Boris
(26.04.2005 в 07:50)
| | А может там, где стоит код $this -> DisplayShapka(); $this -> Zakaz(); заменить все на одну функцию
DisplayContent()
И эту функцию уже переопределять
В базовом классе.
function DisplayContent {
$this -> DisplayShapka();
}
В наследуемом
function DisplayContent() {
$this -> DisplayShapka(); $this -> Zakaz();
}
Тогда функция Display() будит наследоваться без изменений.
P.S. А зачем определять функцию Zakaz в базовом классе, а не в наследуемом? | |
|
|
|
|
|
|
|
для: Artem S.
(26.04.2005 в 08:36)
| | Спасибо! Да, дельная мысль, вообще у меня меню очень изощренное, сейчас буду думать как применить твое предложение.
Задача стоит перевести сайт на PHP, чтобы его удобнее обслуживать.
P.S. Если интересно, то вот он предмет обсуждения:http://www.fenix88.nsk.su | |
|
|
|
|
|
|
|
для: Boris
(26.04.2005 в 09:04)
| | Может тогда лучше воспользоваться шаблонами. Они отлично отделяют дизайн от код'a. Хотя на данном форуме есть противники шаблонов, но я думаю вам нужно использовать именно их. Например, http://smarty.php.net | |
|
|
|
|
|
|
|
для: Artem S.
(27.04.2005 в 08:48)
| | Спасибо за ссылку, бегло просмотрел (надо переводить).
Я правильно понимаю, что шаблоны - это подключаемые файлы типа:
menu.inc, shapka.inc и т.д, кторые каждый раз в нужном месте? Или это какая-то новейшая технология.
Я совсем недавно начал изучать эту кухню, в моей книге упор делается на объекты, говорят потом будет легче расширать сайт. По этой причине я решил идти до конца и конец близок. Закончу, могу поделиться результатами, быть может будет интересно поковыряться. | |
|
|
|
|
|
|
|
|
для: cheops
(27.04.2005 в 12:42)
| | Статья хорошая (хоть с ходу ничего не понял, но потенциал чувствуется), да и сайт не плохой.
Век живи - век учись!
Спасибо! | |
|
|
|