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

Форум PHP

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

 

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

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

тема: Классы
 
 автор: Лена   (24.08.2010 в 20:59)   письмо автору
 
 

Сделала конструктор форм.
Тот код, что ниже, занимается выводом уже готовой формы на страницу + добавляет к ней дизайн в зависимости от выбора пользователя. Оставила только общую структуру и то, что касается сути дела.

<?php
//подключаем классы для работы с базой
foreach (glob("DatabaseClasses/*class.php") as $filename) {
    include(
$filename);
}

interface 
ConstractForm{
  function 
RedDesign();
  function 
GreenDesign();
  function 
Design($id_form);
}


class 
Constract implements ConstractForm{

 public function 
__construct($id) {

    
$bd = new DbQuery//ресурс для работы с базой данных

      //собираем форму без дизайна

  
}

  public function 
RedDesign(){
//определенный дизайн
  
}

  public function 
GreenDesign(){
//определенный дизайн
  
}


   public function 
Design($id_form){
    
$bd = new DbQuery//ресурс для работы с базой данных
   //подключение дизайна в зависимости от выбора пользователя
   
}
}

class 
ConstractFactory{
  public static function 
Create($id)
  {
    return new 
Constract($id);
  }
}
//вывод формы на страницу
$fo ConstractFactory::Create(10);
echo 
$fo->Design('forms');

?>


Вопрос вот в чем. У меня в конструкторе класса создается объект, который работает с базой данных. И в методе класса Design у меня опять идет подключение к базе данных. Можно ли сделать так, чтобы подключение было только один раз?

  Ответить  
 
 автор: psychomc   (24.08.2010 в 21:06)   письмо автору
 
   для: Лена   (24.08.2010 в 20:59)
 

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

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

  Ответить  
 
 автор: Лена   (24.08.2010 в 21:54)   письмо автору
 
   для: psychomc   (24.08.2010 в 21:06)
 

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

Спасибо. Если я правильно поняла. Сделала так:
class Constract implements ConstractForm{
private $database;

public function __construct($id) {

$this->database= new DbQuery; //ресурс для работы с базой данных

И в методе Design:
public function Design($id_form){
$sql = "SELECT disign FROM " . $this->table . " WHERE id=" . (int)$id_form;
$disign = $this->database->my_sel1($sql);


>p.s имхо, как по мне так неправильно вешать на интерпретатор такие функции. лучше шаблонизатор. польза и верстальщику и программисту.

Согласна. Только тут сайт написан по типу "все в куче", логика и дизайн не разделены, решила сделать так же. Вспомнила про паттерн Factory, решила его попробовать.

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

  Ответить  
 
 автор: psychomc   (24.08.2010 в 22:25)   письмо автору
 
   для: Лена   (24.08.2010 в 21:54)
 

да, вы правильно поняли....

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

  Ответить  
Rambler's Top100
вверх

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