2010-11-13 2 views
1

В колледже сегодня мы создали простой форум в процедурных PHP. Моя домашняя работа - сделать так, чтобы в ООП (для сравнения), вот где я застрял.Тема/класс темы в php

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

Это то, что я до сих пор,

<?php 

abstract class Thread { 

    protected $_name; //thread name 
    protected $_text; 
    protected $_author; 
    protected $_allowReplies = true; 
    protected $_replies = array(); 


    function __construct($name) 
    { 
     $this->setName($name); 
    } 


    protected function setAuthor(User $author) 
    { 

    } //edited 


    function setAllowReplies($replies) 
    { 
     if (is_bool($replies)) { 
      $this->_allowReplies = $replies; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    function setName($name) 
    { 
     $this->_name = $name; 
    } 

    function addReply($reply) 
    { 
     return $this_replies[] = $reply; 
    } 

    function makeThread()  //builds up array of values to add to database 
    { 
     $values = array(); 
     //add to database here 
    } 
} 
?> 

То, что я не понимаю , теперь мне нужно создать класс для добавления значений в базу данных и абстрактный класс для добавления авторов (используя тип hinting .etc), или я могу просто сделать это здесь?

(Приведенный выше класс является неполным, потому что я на полпути, и думал, что я делаю неправильно)

То, что я в основном пытаюсь сказать, я проектирование выше класс правильно?

+0

Нет, не хватает кода в коде? Я имею в виду «одинокое» ключевое слово 'function' в строке 18 ... – rhino

+0

Да, что предназначалось для защиты функции setAuthor –

ответ

1

В ООП класс должен делать только одно, не так ли?

Не совсем. Класс собирает методы и свойства, которые составляют объект. Это совершенно справедливо для того, чтобы объект определенного класса мог выполнять больше, чем просто одну задачу.

То, что я не понимаю, у меня теперь есть создать класс для добавления значений в базе данных и абстрактным классом, чтобы добавить Авторы (с использованием типа намекая Т.д.), или я могу просто сделать это Вот?

Вам не нужен дополнительный класс для добавления потока или его значений в базу данных (можно было бы). Просто предложите интерфейсы (т. Е. Методы) для мира, чтобы добавить и обработать поток. Возьмите автор в качестве примера:

/* 
* Assigns the thread to the specified author 
* Returns boolean 
*/ 
public function set_author(Author $a) 
{ 
    // Forge you SQL query based on the author $a's data and 
    // send it to your database 

    // How this is done heavily depends on your table topology 
} 
+0

Как бы такие вещи, как проверка запрещенных пользователей? –

+0

Проверка запрещенных пользователей на что? Невозможно отправить сообщение в тему? – aefxx

+0

Да, .. не имея возможности начать нить, в процедуре я поместил запрещенных пользователей в массив и использовал in_array. Будет ли такая же вещь в setAuthor? –

0

Прежде всего .. Вы можете переименовать класс не «Тема» на самом деле вводит в заблуждение. Теперь о дизайне вашего класса. Сначала вам нужно разработать схему базы данных. Что необходимо для хранения? Связи? , например.

Table Topic 
(
    Topic_ID, 
    Title_ID, 
    Author_ID, //Or User_ID 
    Topic_Text, 
    .... 
) 

Table Commends 
(
    Comm_ID, 
    Topic_ID, //Relation 1..n 
    Title_ID, 
    Author_ID, 
    Comm_Text, 
    ... 
) 

Затем в схеме вашего класса вы можете выполнить «Шаблон стратегии». в этом случае вы создадите абстрактный класс, называемый DBObject (объект DataBase), где каждый объект, имеющий экземпляр в вашей базе данных, представляет собой DBObject (пользователи, темы, комманды и т. д.). DBObject имеет «базу данных», поэтому вы также создаете класс базы данных, который обрабатывает, выполняет и извлекает каждый запрос БД. теперь у вас есть UML, чтобы начать создавать свои классы.

и пример:

$tpc = new Topic(); // initiates Topics variables, Begin Transaction 
$tpc->setCategory("..."); //Sets the Category_ID 
$tpc->setTitle("..."); //Create a Title in Title table, and Stores the Title_ID 
$tpc->setAuthor("User_ID"); //Check if Author Exist, Sets the Auth_ID 
$tpc->setText($_POST['text']); //OMG Don't use the $_POST['text'] like this..!! 
$tpc->execute(); //Sets DateTime Creation, etc. Executes Query, Ends Transaction. 

Надеется, что это поможет .. Наслаждайтесь ..! :)

Смежные вопросы