Класс - страница

hash

Guest
Класс - страница

Привет всем.
В php я новичек. Возникла у меня необходимость написать интерфейс к СУБД.
Я описал класс для отображения страницы, но при реализации разных запросов, приходится определять дочерние классы и переопределять в них функцию обработки параметров и вывода результата..
Подскажите, пожалуйста, правильный ли такой подход?
Как еще можно реализовать разный контент на страницах ?
И еще, есть ли доступ к переменным сессии в классе, если он описан в подключаемом файле?
Заранее спасибо.
 

jer

...
В php я новичек. Возникла у меня необходимость написать интерфейс к СУБД.
лучше бы описал свою необходимость, а народ тебе подскажет как ее лучше (правильней) реализовать
а то из твоего поста мало что понятно.

а доступ к переменным сессии есть везде, это же глобальные переменные.
 

hash

Guest
Конкретно необходимость....
1. Вывести сумму(ы) денег за определенный период по телефонным номерам...
2. Выдать выборку номеров по какой-нить категории или категориям...
3....
.и т.д и т.п.
N....
Вопрос : как это можно совместить с классом, который описывает страницу?
 

jer

...
hash

ты сначала пишешь что есть необходимость

Возникла у меня необходимость написать интерфейс к СУБД.
потом гворишь
Конкретно необходимость....
1. Вывести сумму(ы) денег за определенный период по телефонным номерам...
2. Выдать выборку номеров по какой-нить категории или категориям...
ты четко опиши что ты хочешь

Я описал класс для отображения страницы, но при реализации разных запросов, приходится определять дочерние классы и переопределять в них функцию обработки параметров и вывода результата..
Подскажите, пожалуйста, правильный ли такой подход?
из этого непонятен твой подход.

приводи куски характерного кода, только немного и по-делу.
тогда можно будет сказать что-то по твоей структуре.
правильная она или нет.

читай правила, вопросы надо задавать четко, а не все в кучу пихать!

если у теб много вопросов разбей их на несколько и начни сначала с более общих.
 

hash

Guest
Есть класс Page.
дераем так

page.inc.php:
<?php
class Page(){
var $title;
var $header;
function Page($title = "Page title",$header="Page Header"){
$this->title = $title;
$this->header = $header;
}
function DisplayContent(){
if ($_GET[var]){
print "var is".$_GET['var'];
}else{
print "<form action='' method='get'>";
.....
print "</form>";
}
}
fuction Display(){
echo "<html><head><title>".$this->title."</title></head><body>";
$this->DisplayContent();
echo "</body></html>"
}
}
?>
Для генераци страницы пишем:
<?
include("/lib/page.inc.php");
$p = new Page("Title","Head");
$p->Display();
?>
вопрос заключается в том как сгенерировать страничку с использованием класса Page, чтобы она выполняла другие функции.
 

jer

...
теперь хоть примерно понятно чего ты хочешь добиться.

предлагаю один из вариантов:

пишешь базовый класс Class_Page для страницы, содержащий все общие методы для работы с любой страницей сайта, скорее всего там у тебя будут и виртуальные методы, которые будут определяться только в потомках.

Потом под каждый тип страниц пишешь свой класс, наследованный от базового.

Class_Page_News extends Class_Page
Class_Page_Prod extends Class_Page
Class_Page_Article extends Class_Page

в каждом наследованном классе переопределяешь нужные тебе методы, через это ты и реализуешь разную работу для разных типов страниц.

это что касается применения ООП. вообще тебе надо начать с чтения теории по ООП. я тебе описал самый примитивные способ в рамках твоей задачи. по-правильному делается все подругому (гораздо сложнее).

что касается интерфейса к СУБД - пишешь отдельный класс по работе с базой. и потом делаешь линк на инстанцию этого класса в объекте (в нашем случае Class_Page_News, Class_Page_Prod, Class_Page_Article). причем создание объекта класса лучше реализовать через Singleton (это паттерн проектирования), чтобы все объекты работали через единственную копию объекта. хотя тебе это наверное рано, только запутаешься.

выглядеть это будет примерно так:

PHP:
class Class_Page
{
     $var db;
     function Class_Page() // конструктор
     {
           // здесь создаем объект класса по работе с базой
           $this->db = new Class_DB::instance(); // это статический метод класса Class_DB, собственно и реализующий Singleton
           // дальше работаем с базой через его методы
           // $this->db->*
     }

     // тут идут общие методы для всех страниц
}

class Class_Page_News extends Class_Page
{
      function Class_Page_News() // конструктор
      {
           parent::Class_Page(); // вызываем конструктор отца

      }

      // тут переопределяем методы характерные только для этой страницы
}

повторяю, это я тебе описал структуру которую ты предложил, но применяя ООП обычно пишется не так. но идею я тебе изложил.
 

hash

Guest
В принципе я так и делаю(в книжке так написано было), только использую ADODB....
но применяя ООП обычно пишется не так
вот я и хочу узнать, как все-таки это делается правильно и красиво...
Можно ли, к примеру, передать в класс ссылку на функцию, которую потом выполнить в DisplayContent?
 

jer

...
я тебя здесь этому всему научить не смогу.

могу только посоветовать почитать теорию ООП, Гради Буча, например.

смотри примеры кода, разбирайся, пробуй писать сам, снова разбирайся, исправляй код. через несколько таких итераций что-то получиться должно :)
без опыта ты сам не напишешь хороший код, даже с помощью профессионалов.

структура зависит от твоих задач.

я, например, классы создаю не для каждого типа страницы свой, а для каждой сущности свой, т.е. для новостей отдельный класс, для базы товаров отдельный, а на каждой странице вызываются необходимые методы нужной сущности.
+ каждая сущность строится по принципу разделения MVC (Model View Controller), про это тоже полезно почитать. MVC на форуме обсуждалось - в поиск.

другой вопрос, надо ли тебе так все усложнять?
 

hash

Guest
И еще вопрос, как кодиво оформлять, чтоб оно так красиво в постах смотрелось?
 

jer

...
заключаешь в теги [пхп(по аглицки)]тут код[/пхп(по аглицки)]
 

hash

Guest
я, например, классы создаю не для каждого типа страницы свой, а для каждой сущности свой, т.е. для новостей отдельный класс, для базы товаров отдельный, а на каждой странице вызываются необходимые методы нужной сущности.
А разве страница с методами аутентификации(к примеру) не является сущностью?
Т.е. любая страница в ресурсе обладает схожими свойствами, методами и, как мне кажется, можно выделить общие свойства и методы в абстрактный класс.
 

jer

...
аутентификацию можно сделать, например, методом класса Посетитель.

страница - это своего рода Контроллер, который управляет Моделью и Видом (в терминологии MVC).
 
Сверху