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 :

Amélioration de ma POO : nom de classe


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Points : 55
    Points
    55
    Par défaut Amélioration de ma POO : nom de classe
    Etant un grand débutant en POO (c'est rien de le dire ) je m'inspirer d'un vieux tutorial (2005) plutôt bien fait sur la création d'un générateur de formulaire pour mon premier projet. L'auteur y utilise le DP Factory pour créer dynamiquement les différent élément de formulaire. Le souci, c'est qu'il utilise des classes différentes pour chaque type d'élément (ex : classe textinput, submitbutton, passwordinput...) qui ont tous leur code en commun, à part la nom du type (text, submit, password). L'auteur revendique l'utilisation de classes différentes pour plus de souplesse. Néanmoins, je ,pense que factoriser ce code permettrait d'avoir un code plus court (plus efficace ?).
    Le problème c'est que je ne sais pas du tout comment m'y prendre, sauf que d'après ce que j'ai pu lire une classe factory pourrait aider.

    Voici le code actuel:
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    abstract class formElementFactory
    {
     private function __construct(){}
     
     public static function createElement($type,$attributes=array())
     {
      if(!class_exists($type) || !is_array($attributes))
      {
       throw new Exception('Invalid method parameters');
      }
      // instantiate a new form element object
      $formElement=new $type($attributes);
      // return form object’s HTML
      return $formElement->getHTML();
     }
    }
     
    class textinput
    {
     private $html;
     
     public function __construct($attributes=array())
     {
      if(count($attributes)<1)
      {
       throw new Exception ('Invalid number of attributes');
      }
      $this->html='<input type="text" ';
      foreach($attributes as $attribute=>$value)
      {
       $this->html.=$attribute.'="'.$value.'" ';
      }
      $this->html.='/>';
     }
     
     public function getHTML()
     {
      return $this->html;
     }
    }
     
    class submitbutton
    {
     private $html;
     
     public function __construct($attributes=array())
     {
      if(count($attributes)<1)
      {
       throw new Exception ('Invalid number of attributes');
      }
      $this->html='<input type="submit" ';
      foreach($attributes as $attribute=>$value)
      {
       $this->html.=$attribute.'="'.$value.'" ';
      }
      $this->html.='/>';
     }
     
     public function getHTML()
     {
      return $this->html;
     }
    }
     
    $input1=array('textinput'=>array('name'=>'textbox1','value'=>$_POST['textbox1']));
    $input2=array('textinput'=>array('name'=>'textbox2','value'=>$_POST['textbox2']));
    $input3=array('submitbutton'=>array('name'=>'submit','value'=>'Envoyer'));
     
    $formElements=array($input1,$input2,$input3);
     
    echo '<form name="form" action="'.$_SERVER['PHP_SELF'].'" method="post">';
    foreach($formElements as $element)
    {
     foreach($element as $type=>$attributes)
     {
      echo formElementFactory::createElement($type,$attributes);
     }
    }
    echo '</form>';
    et la factory à la quelle je pense:
    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
    abstract class nameFactory
    {
     private function __construct(){}
     
     public static function name($name='')
     {
      if ($name != '')
      {
       return new $name;
      }
      else
      {
       throw new Exception ('Nom de la classe non trouvée');
      }
     }
    }

    mais comment l'intégrer dans mon code? Je ne suis pas encore très abstrait

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 70
    Points : 79
    Points
    79
    Par défaut
    Dans ton constructeur, tu peux mettre un parametre type
    qui prendra donc "submit", "text", "hidden", checkbox", ou "radio" ...

    probleme: comment faire les textarea et les select puisque ce ne sont pas des input ??
    dans ce cas, tu passes pas "type" en parametre mais un tableau ... avec
    tag_name, value, class machin machin ...

    voila un début de réponse ;;;

Discussions similaires

  1. [POO] Comment tester le contenu du nom de class d'une div ?
    Par Vincdeladrome dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/03/2008, 22h24
  2. Réponses: 4
    Dernier message: 18/01/2007, 06h46
  3. Réponses: 2
    Dernier message: 09/10/2005, 16h35
  4. Passer un text comme un nom de classe
    Par marie253 dans le forum Langage
    Réponses: 5
    Dernier message: 19/07/2004, 12h22
  5. [Chargement de classe][noms de classe relatifs]
    Par freudy dans le forum Langage
    Réponses: 5
    Dernier message: 21/04/2004, 12h36

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