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

Форум PHP

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

 

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

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

тема: Постижение ООП
 
 автор: Akira   (19.07.2005 в 17:50)   письмо автору
 
 


<?
class build_page
{
    var 
$title=''// Название страницы
    
var $charset=''// Кодировка страницы
    
var $css=''// Стили для страницы
    
var $meta=''// Доп. параметры
    
var $text=''// Сам текст вывода
    
function __construct()
    {
        echo 
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n
        <HTML>\n<HEAD>\n'
;
    }
    function 
title()
    {
        echo 
"<TITLE>".$this->title."</TITLE>\n";
    }
    function 
charset()
    {
        echo 
'<meta http-equiv="Content-Type" content="text/html; charset='.$this-charset.'">\n';
    }
    function 
css()
    {
        echo 
'<link href="'.$this->css.'" rel="stylesheet" type="text/css">\n';
    }
    function 
meta()
    {
        echo 
$this-meta.'\n';
    }
    function 
text()
    {
        echo 
$this->text.'\n';
    }
    function 
__destruct()
    {
        echo 
'</body>\n</html>\n';
    }
}
$page = new build_page;
$page->title "testing";
$page->charset "windows-1251";
$page->css "main.css";
$page->text "This is text in new page";
?>

Что не так?

   
 
 автор: isset   (19.07.2005 в 18:27)   письмо автору
 
   для: Akira   (19.07.2005 в 17:50)
 

А может все так?

   
 
 автор: cheops   (19.07.2005 в 18:34)   письмо автору
 
   для: Akira   (19.07.2005 в 17:50)
 

Не вызываются методы класса, непонятно зачем натыканы \n в одиночных кавычках - они в них не интерпретируются, а выводятся как есть, в пару мест вместо -> только символ -. Всё это вы исправите и будет писать верно, но самое страшное методология - такой способ организации класса - это путь в никуда, вам придётся держать в голове какой метод за каким вызывать - это забота класса, никак не пользователя, я как минимум бы переписал класс следующим образом:
<?php 
  
class build_page 
  

    var 
$title=''// Название страницы 
    
var $charset=''// Кодировка страницы 
    
var $css=''// Стили для страницы 
    
var $meta=''// Доп. параметры 
    
var $text=''// Сам текст вывода 
    
function __construct($title$charset$css$meta$text
    { 
        echo 
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD>'
        
$this->title $title;
        
$this->charset $charset;
        
$this->css $css;
        
$this->meta $meta;
        
$this->text $text;
    } 
    function 
output() 
    { 
        echo 
"<TITLE>".$this->title."</TITLE>";
        echo 
'<meta http-equiv="Content-Type" content="text/html; charset='.$this->charset.'">'
        echo 
'<link href="'.$this->css.'" rel="stylesheet" type="text/css">'
        echo 
$this->meta
        echo 
"</head><body>";
        echo 
$this->text

    }
    function 
__destruct() 
    { 
        echo 
'</body></html>'
    } 
  } 
  
$page = new build_page("testing","windows-1251","main.css","","This is text in new page"); 
  
$page->output();
?> 

Если хотите - дробите метод output() на кучу закрытых методов, но метод вывода должен быть один и вызываться один раз, это логично, одна операция - один метод.

   
 
 автор: Akira   (19.07.2005 в 20:03)   письмо автору
 
   для: cheops   (19.07.2005 в 18:34)
 

Насчет \n просто с Зенде писалось :) А мне такой подход больше нравиться, просто решил, что надо за ООП браться в полный рост. Я правельно понял функции __construct и __destruct.
Дело вто, что тот движок который я писал не удалось установить на выделенный сервер из-за специфики настроек. И поэтому я решил поступить, как мы обсцждали раньше т.е. создание простых хтмл страниц.
Я правельно понял назначение ООП? Может стоило процедурным методом?
Так же хочу написать код для распознования css стилей. Его как стоит исполнить?
ООП или процедурным методом?

   
 
 автор: cheops   (20.07.2005 в 00:21)   письмо автору
 
   для: Akira   (19.07.2005 в 20:03)
 

> Я правельно понял функции __construct и
>__destruct.
Да.

>Я правельно понял назначение ООП? Может стоило процедурным
>методом?
Да правильно, но ООП требует достаточно продуманного использования, как и структурное программирование - создать нечитабельный и сложный в сопровождении код на нём очень легко.

>Так же хочу написать код для распознования css стилей. Его
>как стоит исполнить?
Код можно выполнять в любом стиле - лишь бы он эффективно решал ваши задачи, если сейчас у вас главная задача освоить ООП - решайте её с испльзованием ООП... но будьте готовы, что со временем вы захотите его переписать по новой...

   
 
 автор: Akira   (20.07.2005 в 00:38)   письмо автору
 
   для: cheops   (20.07.2005 в 00:21)
 

К сожелению или к счастью у меня не когда не получалось написать два кода полностью одинаковым, так же мне легче заново написать код чем разобрать страый :( Поэтому я думаю сопровождать как можно подробнее комментариями.

   
 
 автор: cheops   (20.07.2005 в 00:48)   письмо автору
 
   для: Akira   (20.07.2005 в 00:38)
 

>Поэтому я думаю
>сопровождать как можно подробнее комментариями.
Да к этому лучше привыкнуть - окупается :)))

   
 
 автор: Akira   (19.07.2005 в 20:17)   письмо автору
 
   для: cheops   (19.07.2005 в 18:34)
 

хм, не как не получаеться сохранить это в файл :( а не выводить.

   
 
 автор: cheops   (20.07.2005 в 00:21)   письмо автору
 
   для: Akira   (19.07.2005 в 20:17)
 

А как делаете?

   
 
 автор: Akira   (20.07.2005 в 00:37)   письмо автору
 
   для: cheops   (20.07.2005 в 00:21)
 

Пытался заменить echo на $var[] т.е. поместить в массив. Это было ошибкой?
Предпологаеться, что из бд берем информацию и создаем страницу которая сохраняеться на сервере.

   
 
 автор: cheops   (20.07.2005 в 00:47)   письмо автору
 
   для: Akira   (20.07.2005 в 00:37)
 

нет должно работать - а где происходит запись в файл? Может так случиться, что в файл не попадёт '</body></html>' - так как в дестркутор, это последний выполняемый метод класса.

   
 
 автор: Akira   (20.07.2005 в 01:33)   письмо автору
 
   для: cheops   (20.07.2005 в 00:47)
 

Рабочий код

<?php 
  
class build_page 
  

    var 
$title=''// Название страницы 
    
var $charset=''// Кодировка страницы 
    
var $css=''// Стили для страницы 
    
var $meta=''// Доп. параметры 
    
var $text=''// Сам текст вывода 
    
var $filename '' // Имя файла
    
var $txt ''// буферок
    
function __construct($title$charset$css$meta$text$filename
    { 
        
        
$this->title $title
        
$this->charset $charset
        
$this->css $css
        
$this->meta $meta
        
$this->text $text;
        
$this->filename=fopen($filename"w");
        
    }
    function 
output() 
    {    
         
fwrite($this->filename,'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <HEAD>
        <TITLE>'
.$this->title.'</TITLE>
        <meta http-equiv="Content-Type" content="text/html; charset='
.$this->charset.'">
        <link href="'
.$this->css.'" rel="stylesheet" type="text/css">
        '
.$this->meta.'
    </head>
    <body>
        '
.$this->text.'
    </body>
</html>;'
);
    } 
    function 
__destruct() 
    { 
         
fclose($this->filename);
    } 
  } 
  
$page = new build_page("testing","windows-1251","main.css","","This is text in new page""test.php"); 
  
$page->output();

?>

Просто не стого края подошел.
Скажите а $this-> Это как ярлык для переменной? Без ярлыка переменная будет видна только в той функции, где была создана?
Еще класс у нас build_page.А обьет класса это output.
Я правельно понимаю?
ЗЫ Черт, а может написать скрипт для проверки и исправления орфографических ошибок?

   
 
 автор: cheops   (20.07.2005 в 03:01)   письмо автору
 
   для: Akira   (20.07.2005 в 01:33)
 

Т.е. насколько я понял код работает?

>Скажите а $this-> Это как ярлык для переменной? Без ярлыка переменная будет
>видна только в той функции, где была создана?
Да $this-> сообщает, что переменная является членом класса, а не локальной переменной функции.

>Еще класс у нас build_page.А обьет класса это
>output.
>Я правельно понимаю?
Да, только объектом является $page, output() - это метод класса

   
 
 автор: Akira   (20.07.2005 в 11:51)   письмо автору
 
   для: cheops   (20.07.2005 в 03:01)
 

Хорошо. Будем работать дальше :)

   
Rambler's Top100
вверх

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