2010-05-27 3 views
2

Je dois obtenir des données, les vérifier et les envoyer à db. Programmation avec PHP OOP.php oop et mysql

Pourriez-vous me dire si ma structure de classe est bonne et comment supprimer toutes les données? Merci

<?php 
class Database{ 

    private $DBhost = 'localhost'; 
    private $DBuser = 'root'; 
    private $DBpass = 'root'; 
    private $DBname = 'blog'; 

    public function connect(){ 
     //Connect to mysql db 
    } 

    public function select($rows){ 
     //select data from db 
    } 

    public function insert($rows){ 
     //Insert data to db 
    } 

    public function delete($rows){ 
     //Delete data from db 
    } 
} 

class CheckData{ 

    public $number1; 
    public $number2; 

    public function __construct(){ 
     $this->number1 = $_POST['number1']; 
     $this->number2 = $_POST['number2']; 
    } 

    function ISempty(){ 
     if(!empty($this->$number1)){ 
      echo "Not Empty"; 

      $data = new Database(); 
      $data->insert($this->$number1); 
     } 
     else{ 
      echo "Empty1"; 
     } 

     if(!empty($this->$number2)){ 
      echo "Not Empty"; 

      $data = new Database(); 
      $data->insert($this->$number2); 
     } 
     else{ 
      echo "Empty2"; 
     }  
    } 
} 

class DisplayData{ 

    //How print all data? 
    function DisplayNumber(){ 
     $data = new Database(); 
     $data->select(); 
    } 
} 

$check = new CheckData(); 
$check->ISempty(); 

$display = new DisplayData() 
$display->DisplayNumber(); 
?> 
+0

La structure de classe est bonne, cependant, un oops je vois. La méthode "ISempty" devrait probablement être "isEmpty" pour éviter les erreurs commises par d'autres personnes lisant le code. J'ai d'abord pensé que vous étiez en train de référencer une interface quand j'ai vu "ISempty" (interface nommée "Sempty" lol). De plus, je ferais probablement abstraction de la classe Database et la rendrait réutilisable dans n'importe quel projet (sans recoder les informations d'identification db). – Zack

Répondre

4

C'est un morceau de code horrible.

  1. Pour la communication de base de données, utilisez PDO. Ce n'est pas parfait, mais ça va.
  2. Chaque fois que vous aurez besoin d'une base de données, vous vous connecterez avec cette base de données?
  3. Database::insert() etc. devrait être un vrai magicien de deviner où son paramètre doit être inséré
+0

@Gutzofter: Ekhem ... quoi? – Crozin

1

Vous avez besoin d'un meilleur IDE pour montrer vos variables non définies. J'utilise PHPStorm.

Vous avez besoin de dependency injection. Utilisez encapsulation. Il suffit de suivre SOLID.

Avant-dernière chose, ne faites pas d'écho depuis l'intérieur des objets. Vous ne pouvez pas unit test efficacement votre code de cette façon.

Vous pouvez également essayer TDD.

+1

Tout est très bien, bien sûr, mais apprendre en une seule fois est assez décourageant. Je suggère d'abord d'en apprendre davantage sur l'encapsulation puisque cela fait partie de toutes les autres choses que vous mentionnez. Les tests unitaires, l'injection de dépendance et les principes généraux SOLID suivent de là. En outre, NetBeans a un très bon IDE PHP ces jours-ci et est totalement gratuit. –

+0

Mon IDE précédent est/était NetBeans. Storm gère le déploiement vers un SCM et vers un serveur via ftp. – Gutzofter

+0

Oh et gratuit est toujours bon. – Gutzofter

1

Vous allez à tort, je pense. Ce que vous construisez est une enveloppe autour des fonctions de base de données déjà existantes. La chose est, ces fonctions déjà définies pour faire exactement ce que vous voulez - l'approche orientée objet ici ne sert à rien parce qu'elle ne peut se connecter qu'à une base de données et les méthodes ne sont pas vraiment bien définies et semblent agir comme des couche sous-jacente.

Comme d'autres l'ont mentionné, le code que vous semblez suivre ne vous convient pas. Quelque chose comme PDO vous servira bien et c'est déjà intégré à PHP. Vous n'avez pas besoin de réinventer la roue pour un code commun comme l'accès à une base de données. L'apprentissage de quelques principes fondamentaux de l'orientation des objets vous fera aussi du bien - regardez d'abord l'encapsulation et la réutilisation du code. Ils vous aideront dans le futur quand vous devrez maintenir ce code que vous écrivez!