Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Наследование, полиморфизм?
 
 автор: Boris   (26.04.2005 в 07:50)   письмо автору
 
 

Добрый день!
У меня принципиальный вопрос.
Создаю класс 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, даже когда она не нужна на странице.
Т.е. может получиться, что в базовом классе я опишу все возможные случаи использования страницы, на деле использоваться будут лишь несколько из них, а осталные - грузятся в холостую?

Спасибо за внимание!
Борис.

   
 
 автор: Artem S.   (26.04.2005 в 08:36)   письмо автору
 
   для: 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 в базовом классе, а не в наследуемом?

   
 
 автор: Boris   (26.04.2005 в 09:04)   письмо автору
 
   для: Artem S.   (26.04.2005 в 08:36)
 

Спасибо! Да, дельная мысль, вообще у меня меню очень изощренное, сейчас буду думать как применить твое предложение.
Задача стоит перевести сайт на PHP, чтобы его удобнее обслуживать.

P.S. Если интересно, то вот он предмет обсуждения:http://www.fenix88.nsk.su

   
 
 автор: Artem S.   (27.04.2005 в 08:48)   письмо автору
 
   для: Boris   (26.04.2005 в 09:04)
 

Может тогда лучше воспользоваться шаблонами. Они отлично отделяют дизайн от код'a. Хотя на данном форуме есть противники шаблонов, но я думаю вам нужно использовать именно их. Например, http://smarty.php.net

   
 
 автор: Boris   (27.04.2005 в 09:28)   письмо автору
 
   для: Artem S.   (27.04.2005 в 08:48)
 

Спасибо за ссылку, бегло просмотрел (надо переводить).
Я правильно понимаю, что шаблоны - это подключаемые файлы типа:
menu.inc, shapka.inc и т.д, кторые каждый раз в нужном месте? Или это какая-то новейшая технология.
Я совсем недавно начал изучать эту кухню, в моей книге упор делается на объекты, говорят потом будет легче расширать сайт. По этой причине я решил идти до конца и конец близок. Закончу, могу поделиться результатами, быть может будет интересно поковыряться.

   
 
 автор: cheops   (27.04.2005 в 12:42)   письмо автору
 
   для: Boris   (27.04.2005 в 09:28)
 

Исчерпывающая статья по шаблонам расположена по ссылке http://providerz.ru/articles/php/templates.html

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1283

   
 
 автор: Boris   (27.04.2005 в 14:21)   письмо автору
 
   для: cheops   (27.04.2005 в 12:42)
 

Статья хорошая (хоть с ходу ничего не понял, но потенциал чувствуется), да и сайт не плохой.
Век живи - век учись!
Спасибо!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования