• Aucun résultat trouvé

Travailler avec des objets

Dans le document Cours php Objet (Page 50-54)

Avant de travailler avec des objets, encore faut-il savoir de quelle classe ils sont issus. Dans notre cas, nous voulons des objets représentant des personnages. On aura donc besoin d’une classe Personnage !

1 <? php 2 class Personnage 3 { 4 5 } 6 ?>

Vient maintenant une question embêtante dans votre tête pour construire cette classe : « Je commence par où ? » Une classe est composée de deux parties (éventuellement trois) :

– une partie déclarant les attributs. Ce sont les caractéristiques de l’objet ; – une partie déclarant les méthodes. Ce sont les fonctionnalités de chaque objet ; – éventuellement, une partie déclarant les constantes de classe. Nous nous en occupe-

rons en temps voulu.

Lorsque l’on veut construire une classe, il va donc falloir systématiquement se poser les mêmes questions :

UNE ENTITÉ, UN OBJET

– Quelles seront les fonctionnalités de mes objets ?

Les réponses à ces questions aboutiront à la réalisation du plan de la classe, le plus difficile. ;) Commençons donc à réfléchir sur le plan de notre classe en répondant à la première question : « Quelles seront les caractéristiques de mes objets ? » Pour vous mettre sur la piste, regardez de nouveau le tableau de la BDD contenant les entrées, cela vous donnera peut-être la réponse. . . Et oui, les attributs de notre classe (les caractéristiques) nous sont offerts sur un plateau ! Ils sont listés en haut du tableau : id, nom, forcePerso, degats, niveau et experience. Écrivons maintenant notre classe :

1 <? php 2 class Personnage 3 { 4 private $_id; 5 private $_nom; 6 private $_forcePerso; 7 private $_degats; 8 private $_niveau; 9 private $_experience; 10 } 11 ?>

Il faut bien sûr implémenter (écrire) les getters et setters qui nous permettront d’accéder et de modifier les valeurs de notre objet. Pour rappel, un getter est une méthode chargée de renvoyer la valeur d’un attribut, tandis qu’un setter une méthode chargée d’assigner une valeur à un attribut en vérifiant son intégrité (si vous assignez la valeur sans aucun contrôle, vous perdez tout l’intérêt qu’apporte le principe d’encapsulation). Pour construire nos setters, il faut donc nous pencher sur les valeurs possibles de chaque attribut :

– les valeurs possibles de l’identifiant sont tous les nombres entiers strictement positifs ; – les valeurs possibles pour le nom du personnage sont toutes les chaînes de caractères ; – les valeurs possibles pour la force du personnage sont tous les nombres entiers allant

de 1 à 100 ;

– les valeurs possibles pour les dégâts du personnage sont tous les nombres entiers allant de 0 à 100 ;

– les valeurs possibles pour le niveau du personnage sont tous les nombres entiers allant de 1 à 100 ;

– les valeurs possibles pour l’expérience du personnage sont tous les nombres entiers allant de 1 à 100.

On en déduit donc le code de chaque setter. Voici donc ce que donnerait notre classe avec ses getters et setters :

1 <? php 2 class Personnage 3 { 4 private $_id; 5 private $_nom; 6 private $_forcePerso; 7 private $_degats; 8 private $_niveau;

9 private $_experience; 10

11 // Liste des getters 12 13 public function id() 14 { 15 return $this->id; 16 } 17

18 public function nom() 19 {

20 return $this->nom; 21 }

22

23 public function forcePerso() 24 {

25 return $this->forcePerso; 26 }

27

28 public function degats() 29 {

30 return $this->degats; 31 }

32

33 public function niveau() 34 {

35 return $this->niveau; 36 }

37

38 public function experience() 39 {

40 return $this->experience; 41 }

42

43 // Liste des setters 44

45 public function setId($id) 46 {

47 // On convertit l'argument en nombre entier . 48 // Si c'en é tait déjà un , rien ne changera .

49 // Sinon , la conversion donnera le nombre 0 (à quelques

exceptions près, mais rien d'important ici ).

50 $id = (int) $id; 51

52 // On vé rifie ensuite si ce nombre est bien strictement

positif .

53 if ($id > 0) 54 {

55 // Si c'est le cas , c'est tout bon , on assigne la valeur

UNE ENTITÉ, UN OBJET

56 $this->_id = $id; 57 }

58 } 59

60 public function setNom($nom) 61 {

62 // On vé rifie qu 'il s'agit bien d'une cha îne de caract è res . 63 if ( is_string ($nom))

64 {

65 $this->_nom = $nom; 66 }

67 } 68

69 public function setForcePerso($forcePerso) 70 {

71 $forcePerso = (int) $forcePerso; 72

73 if ($forcePerso >= 1 && $forcePerso <= 100) 74 {

75 $this->_forcePerso = $forcePerso; 76 }

77 } 78

79 public function setDegats($degats) 80 {

81 $degats = (int) $degats; 82

83 if ($degats >= 0 && $degats <= 100) 84 {

85 $this->_degats = $degats; 86 }

87 } 88

89 public function setNiveau($niveau) 90 {

91 $niveau = (int) $niveau; 92

93 if ($niveau >= 1 && $niveau <= 100) 94 {

95 $this->_niveau = $niveau; 96 }

97 } 98

99 public function setExperience($experience) 100 {

101 $experience = (int) $experience; 102

103 if ($experience >= 1 && $experience <= 100) 104 {

106 } 107 } 108 } 109 ?>

Reprenons notre code de tout à l’heure, celui qui nous permettait de lire la BDD. Modifions-le un peu pour qu’on puisse manipuler des objets et non des tableaux :

1 <? php

2 // On admet que $db est un objet PDO .

3 $request = $db->query('SELECT id , nom , forcePerso , degats ,

niveau , experience FROM personnages ');

4

5 while ($donnees = $request->fetch(PDO::FETCH_ASSOC)) // Chaque

entr ée sera ré cup érée et plac ée dans un array .

6 {

7 // On passe les donn ées ( stock ées dans un tableau ) concernant

le personnage au constructeur de la classe .

8 // On admet que le constructeur de la classe appelle chaque

setter pour assigner les valeurs qu 'on lui a donn ées aux attributs correspondants .

9 $perso = new Personnage($donnees); 10

11 echo $perso->nom() , ' a ', $perso->forcePerso() , ' de force ,

', $perso->degats() , ' de dégâts , ', $perso->experience() ,

' d\' exp é rience et est au niveau ', $perso->niveau();

12 }

Et quelles seront les méthodes de nos classes ? Les méthodes concernent des fonctionna- lités que possède l’objet, des actions qu’il peut effectuer. Voyez-vous des fonctionnalités intéressantes à implémenter ? Pour les opérations basiques que l’on effectue, il n’y en a pas besoin. En effet, nous voulons juste créer des objets et assigner des valeurs aux attributs, donc hormis les getters et setters, aucune autre méthode n’est nécessaire ! D’accord, nous avons des objets maintenant. Mais à quoi cela sert-il, concrètement ? Il est sûr que dans cet exemple précis, cela ne sert à rien. Mais vous verrez plus tard qu’il est beaucoup plus intuitif de travailler avec des objets et par conséquent beaucoup plus pratique, notamment sur de grosses applications où de nombreux objets circulent un peu dans tous les sens.

L’hydratation

Dans le document Cours php Objet (Page 50-54)