IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP5] Besoin de vos avis :)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut [PHP5] Besoin de vos avis :)
    Hello,

    J'essaie de passer progressivement à la POO sur PHP5. Pour m'excercer, j'ai fait aujourd'hui deux class:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    /*****************************
     * Class DebuG                     *
     *                                       *
     * Author:                           *
     *        DIEUNIDOU Sébastien  *
     *****************************/
    
    class Debuger
    {
          static $debug;
          
          public function debug($type, $text, $line, $file)
          {
                if($type == 'MYSQL')
                      $this->mysql($text, $line, $file);
          }
    
          private function mysql($text, $line, $file)
          {
                if($this->debug == TRUE)
                      die($text . '<br /><strong>Erreur: </strong> <i>' . mysql_error() . '</i>
                      . <br /><strong>Page: </strong> <i>' . $file . '</i>
                      . <br /><strong>Ligne: </strong> <i>' . $line . '</i>');
                else
                      die($text);
          }
    }
    
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?php
    /*****************************
     * Class MySQL                     *
     *                                       *
     * Author:                           *
     *        DIEUNIDOU Sébastien  *
     *****************************/
     
    class MySqL
    {
          private $Host;
          private $User;
          private $Pass;
          private $Base;
          private $Mysql;
          private $debuging;
          static $query;
          public $Count_Query = 0;
       
          function __construct($host, $user, $pass, $base)
          {
                $this->Host = $host;
                $this->User = $user;
                $this->Pass = $pass;
                $this->Base = $base;        
                $this->debuging = new Debuger();
                $this->debuging->debug = TRUE;
          }         
    
          public function MConnect()
          {
                if(!$this->Mysql = mysql_connect($this->Host, $this->User, $this->Pass))
                      $this->debuging->debug('MYSQL', 'Connexion à MYSQL impossible', __LINE__, __FILE__);
          }
    
          public function DBSelect()
          {
                if(!mysql_select_db($this->Base, $this->Mysql))
                      $this->debuging->debug('MYSQL', 'Impossible de sélectionner la base de données', __LINE__, __FILE__);
          }
             
          public function MClose()
          {
                mysql_close($this->Mysql);
          }
             
          public function Query($query)
          {
                if(!$this->query = @mysql_query($query))
                      $this->debuging->debug('MYSQL', 'Requête invalide', __LINE__, __FILE__);
                else
                {
                      $this->Count_Query++;
                      return $this->query;
                }
          }
    }
    
    $MySqL = new MySqL('localhost', 'root', 'pass', 'test');
    
    $MySqL->MConnect();
    $MySqL->DBSelect();
    $query = $MySqL->Query('SELECT * FROM `dossiers`');
    while($row = mysql_fetch_object($query))
    {
          echo '<p><strong>Auteur: </strong>' . $row->auteur . '</p>';
    }
    ?>

    Ma question est toute simple: est ce que je code "bien" en PHP5 ? Que pensez vous de mon code ? Comment pourrais je l'optimiser ? .. etc

    Bref j'attends tous vos avis sur ces deux petites classes pour me permettre d'exploiter de plus en plus la POO de php5

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Par défaut
    est ce que je code "bien" en PHP5
    la n'est pas la quetion; Pose toi plutot des questions , comme est ce que je peut généralise mon objet debug a tout autre classe, que devient mon code si je choisi un autre sgbd, mon code est-il reutillisable, evolutif et a t'il besoin de l'etre???

  3. #3
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    J'y rajouterais une question :
    Ai je donner le bon role au bon objet ?
    Ou bien encore, ai je respecter la nature de mon objet ?

    En effet si on regarde ta classe debugger, c'est en fait un classe qui execute une requete, si cette requete provoque une erreur cette même classe affichera l'erreur.

    Deja dans la description il y à quelque chose de *choquant*.
    En effet la classe debugger execute deux actions qui n'ont pas le même contexte, mais un cheminement logique (il yà une erreur, alors je l'affiche).

    - La première action est l'execution d'une requete, cette action prise aussi simplement que possible, c a d *executer une requete*, à plutot rapport avec une classe de SGBD qu'une classe de gestion d'erreur ou de debug.

    - La deuxieme action, afficher une erreur, vise à formater une erreur et l'afficher sur la sortie standard. On sent bien qu'elle n'aurait rien à faire dans une classe de SGBD, mais plutot dans une classe de gestion d'erreur et d'exception plus généraliste.

    Partant de la on se rend bien compte que la classe débugger à un souci de sémantique, ou que ton architecture est bancale.
    C'est une question d'interprétation.

    En effet si je prends ton architecture tel quel, j'aurai plutot une classe Mysql, et une classe MySqlStatement (pour reprendre la nomenclature PDO) à la place de debugger. Cette classe existerait pour executer une requete et être capable de l'exploiter.

    Il n'empeche que même ainsi il y à un problème, en effet l'affichage de l'erreur devrait être déléguer à une classe à part entière, qui serait capable de gérer génériquement n'importe quel type d'erreur (notice/exception), provoquer par n'importe quelle instance.
    Cette classe ne pourrait pas s'appeler debuggger, en effet elle ne débug pas, elle rattrape les erreurs et les affiche (ou quoi que l'on veuille d'ailleurs...). Son nom devrait dès lors plutot être logger, errorCatcher ... ou que sais je, du moment que le nom de la classe énonce clairement le domaine d'action.

    Finalement la problèmatique que tu as voulu résoudre en deux classes, devrait AMHA être résolu en trois classes au moins.
    Une classe de gestion de connection à un BDD, une classe de gestion de ressource de BDD, une classe de gestion d'erreur.

    Quand à une classe de débug.... C'est très compliquè à faire ;)

    Aussi, on ne se demande pas si l'on code OO bien en PHP5, on essaie de coder correctement OO tout court.
    L'OO n'à pas de langage.

    voila, en espérant être resté clair dans mes propos... et ne pas avoir dit trop de conneries xD

    bbye

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ePoX

    (...)

    Il n'empeche que même ainsi il y à un problème, en effet l'affichage de l'erreur devrait être déléguer à une classe à part entière, qui serait capable de gérer génériquement n'importe quel type d'erreur (notice/exception), provoquer par n'importe quelle instance.

    (...)
    Entièrement d'accord avec ePoX, l'orienté objet c'est une méthode de conception avant d'être une syntaxe spécifique à un langage.

    J'ajouterai simplement à ce qui a été dit : La gestion des erreurs (exceptions) en orienté objet devrait être assurée par des blocs "try-catch".

    Les exceptions PHP5 peuvent être manipulées par une classe interne PHP dénomée Exception. On peut également créer une classe membre pour pouvoir personnaliser la gestion des exceptions.

    Tu trouveras quelques informations utiles et un exemple .

    Bonne continuation !
    Dernière modification par Invité ; 23/08/2006 à 00h02.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MCD] traitement d'articles, Besoin de vos avis et de votre aide
    Par Menoto dans le forum Schéma
    Réponses: 25
    Dernier message: 09/11/2006, 08h36
  2. [LIVRE]besoin de vos avis
    Par Fabouney dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 02/10/2006, 23h50
  3. Besoin de vos avis sur un algo
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 16h40
  4. Besoin de vos avis éclairé sur ma base de données
    Par scaleo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/12/2005, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo