2010-11-13 3 views
1

À l'université aujourd'hui, nous avons fait un forum simple en procédure PHP. Mon devoir est de faire en sorte qu'il soit en POO (à titre de comparaison), c'est là que je suis coincé.Un fil/classe de cours en php

Dans OOP, une classe ne devrait faire qu'une chose, non? Ainsi, une classe de sujet devrait permettre à un sujet à créer, définir si les réponses sont le permettent, et obtenir ses réponses ...

C'est ce que je suis arrivé à ce jour,

<?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 
    } 
} 
?> 

Ce que je ne comprends pas Est-ce que je dois maintenant créer une classe pour ajouter les valeurs à la base de données et une classe abstraite pour ajouter des auteurs (en utilisant Type hinting .etc), ou est-ce que je peux juste le faire ici?

(La classe ci-dessus est incomplète parce que je suis arrivé à mi-chemin et je pensais que je faisais mal)

Ce que je suis fondamentalement en train de dire est, que je concevais correctement la classe ci-dessus?

+0

Il n'y a pas quelque chose qui manque dans votre code? Je veux dire le mot-clé «solitaire» 'fonction' sur la ligne 18 ... – rhino

+0

ouais cela était censé être fonction protégée setAuthor –

Répondre

1

Dans OOP, une classe ne devrait faire qu'une chose, non?

Pas tout à fait. Une classe rassemble des méthodes et des propriétés qui constituent un objet. Il est parfaitement possible qu'un objet d'une classe particulière puisse faire plus qu'une simple tâche.

Ce que je ne comprends pas, dois-je maintenant de créer une classe pour ajouter les valeurs à la base de données et une classe abstraite d'ajouter Auteurs (en utilisant le type faisant allusion .etc), ou puis-je faire juste ici?

Vous n'avez pas besoin d'une classe supplémentaire pour ajouter un thread ou ses valeurs à la base de données (vous pouvez, cependant). Il suffit d'offrir des interfaces (c'est-à-dire des méthodes) au monde pour ajouter et manipuler un fil de discussion. Prenez l'auteur comme un exemple:

/* 
* 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

Comment fonctionnent des choses telles que la vérification des utilisateurs interdits alors? –

+0

Vérification des utilisateurs bannis pour quoi? Ne pas être en mesure de poster sur un sujet? – aefxx

+0

Ouais, .. n'étant pas en mesure de démarrer un thread, en procédural j'ai placé les utilisateurs bannis dans un tableau et utilisé in_array. Est-ce que la même chose devrait être faite dans setAuthor? –

0

tout d'abord .. vous pouvez renommer votre classe de ne pas « thread » est en fait trompeuse. Maintenant, à propos de votre conception de classe, vous devrez d'abord concevoir votre schéma de base de données. Qu'est-ce qui est nécessaire pour le stockage? Rapports? par exemple.

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, 
    ... 
) 

Ensuite, dans votre schéma de classe, vous pouvez suivre le "Modèle de stratégie". dans ce cas, vous construisez une classe abstraite appelée DBObject (objet de la base de données), où chaque objet qui a une instance dans votre base de données est un DBObject (Users, Topics, Commends etc.). Un DBObject "a une" base de données, donc vous construisez aussi une classe Database qui gère, exécute et récupère chaque requête DB. maintenant vous avez votre UML pour commencer à construire vos classes.

et un exemple:

$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. 

Hope this aiderai .. .. Enjoy! :)

Questions connexes