Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2008, 14h42   #1
Futur Membre du Club
 
Inscription : décembre 2003
Messages : 86
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 86
Points : 17
Points : 17
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 :
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 :
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
beyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2008, 08h57   #2
Membre du Club
 
Développeur informatique
Inscription : février 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2007
Messages : 70
Points : 61
Points : 61
Envoyer un message via MSN à f.lam
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 ;;;
f.lam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h44.


 
 
 
 
Partenaires

Hébergement Web