Les classes en PHP

Sommaire du document

Si vous désirez plus d'informations sur les différents conçepts de l'orienté-objet, comme les notions de classe et d'encapsulation, vous pouvez consulter les pages relatives à l'orienté-objet.

Nous allons voir ici comment utiliser ces concepts pour coder en PHP orienté-objet.

Déclaration de classe

Il nous suffit d'utiliser le mot clé "class", suivi du nom de la classe, et des accolades pour délimiter le corps de la classe.

Constructeurs et destructeurs

Un constructeur est une méthode de la classe qui sera automatiquement appelée lors de la construction d'une nouvelle instance[1].

Nous pouvons remarquer certaines différences entre PHP4 et PHP5 au niveau des constructeurs 

  • PHP4 : le constructeur porte le même nom que la classe.
  • PHP5 : le constructeur porte un nom prédéfini "__construct()".
    Par compartibilité descendante vers PHP4, nous pouvons encore utiliser le nom de la classe comme constructeur, mais autant prendre les bonnes habitudes...

Un destructeur est utilisé par le système lorsque l'objet n'est plus utilisé. Ceci nous permet de lancer automatiquement certaines actions à ce moment, ou de nous assurer que les variables utilisées seront bien libérées lorsque l'objet ne sera plus utilisé.

Exemple

Les attributs de la classe sont des variables internes à l'objet, qui ne sont accessibles qu'à travers celui-ci[2]. Leur déclaration se fait donc au sein de la déclaration de la classe, et nous pouvons contrôler les accès en masquant leur visibilité (en utilisant par exemple le mot clé "private") et en n'acceptant que les accès au travers de méthodes.

Les méthodes sont des fonctions internes à l'objet. Leur déclaration se fait donc au sein de la déclaration de la classe, de la même manière que pour les autres fonctions.Cependant, au contraire des fonctions qui ne se trouvent pas dans la classe, les méthodes peuvent accéder aux variables qui ne sont pas visibles de l'extérieur (private).

 

Instanciations en PHP

A présent que notre classe est définie, nous n'avons encore aucun objet.
Nous allons donc créer un objet (instance de la classe), ce qui revient à lui réserver un emplacement mémoire, et à lui donner un nom.
Les valeurs seront celles définies par défaut dans le constructeur, ou des valeurs passées en paramètres à ce dernier.

  1. <?php
  2. $myobject = new myclass ("value");
  3. $mytab[0] = new myclass ("value");
  4. ?>

Pour créer un objet au travers de la classe, nous devons employer le mot clé "new" suivi du nom de la classe.
Nous venons donc de créer deux objets, un qui porte le nom myobject, et l'autre qui se trouve à l'index 0 (le premier indice) du tableau mytab.

A ces deux objets, nous affectons la valeur "value". Cette chaîne de caractères (La valeur est ici une chaîne de caractères, mais peut être une valeur numérique, un booléen, etc.) est passé en paramètre au constructeur.

 

Accès aux données

  1. <?php
  2. $myobject->afficher();
  3. ?>

L'accès aux attributs ou aux méthodes d'un objet se fait grâce à l'opérateur d'indirection (représenté par une flèche).

Exemple

  1. <?php
  2. class BrolUser{
  3. protected $id,$name,$mail;
  4. function __construct( $id = -1, $name = 'Inconnu', $mail = '' ){
  5. $this->id = $id;
  6. $this->name = $name;
  7. $this->mail = $mail;
  8. }
  9. function __destruct(){
  10. unset ($this->id);
  11. unset ($this->name);
  12. unset ($this->mail);
  13. }
  14. public function getId(){
  15. return $this->id;
  16. }
  17. public function getName(){
  18. return $this->name;
  19. }
  20. public function getMail(){
  21. return $this->mail;
  22. }
  23. }
  24. ?>

Cet exemple semble assez clair, mais il risque de se compliquer par la suite, en fonction des besoins. Nous pouvons donc dès à présent prendre de bonnes habitudes, et commenter notre code comme le montre l'exemple suivant.

  1. <?php
  2. /**
  3.  * User base class
  4.  * @version 20051022
  5.  * @since 20020319
  6.  * @package be.gaudry.infobrol.user
  7.  */
  8. class BrolUser{
  9. //
  10. // ################################################################
  11. // Declarations
  12. //
  13. /**
  14. * Integer, user id
  15. */
  16. protected $id;
  17. /**
  18. * String, user name
  19. */
  20. protected $name;
  21. /**
  22. * String, mail address
  23. */
  24. protected $mail;
  25. //
  26. // ################################################################
  27. // Constructor and destructor
  28. //
  29. /**
  30. * Basic brol user
  31. *
  32. * @param Integer $id user identifier
  33. * @param String $name username
  34. * @param String $mail user mail address
  35. * @version 20051022
  36. */
  37. function __construct( $id = -1, $name = 'Inconnu', $mail = '' ){
  38. $this->id = $id;
  39. $this->name = $name;
  40. $this->mail = $mail;
  41. }
  42. /**
  43. * @version 20051022
  44. */
  45. function __destruct(){
  46. unset ($this->id);
  47. unset ($this->name);
  48. unset ($this->mail);
  49. }
  50. //
  51. // ################################################################
  52. // Getters
  53. //
  54. public function getId(){
  55. return $this->id;
  56. }
  57. public function getName(){
  58. return $this->name;
  59. }
  60. public function getMail(){
  61. return $this->mail;
  62. }
  63. }
  64. ?>

Les deux exemples sont strictement identiques au niveau de leur exécution, mais le second sera plus facile à modifier et à comprendre. De plus, comme j'utilise Eclipse pour réaliser mes pages, cet éditeur affiche automatiquement les commentaires quand on appele une méthode, ce qui est bien pratique pour savoir quels arguments nous devons lui passer.

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

11 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Notes

  1.  Classe et instance : Une classe est la définition (la recette), alors qu'une instance est un objet construit à partir de cette classe.

  2.  Encapsulation : les différentes variables sont accessibles au travers de la classe

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-243
Document créé le 19/03/02 01:00, dernière modification le Vendredi 17 Juin 2011, 12:12
Source du document imprimé : http:///www.gaudry.be/php-classes.html
St.Gaudry©07.01.02
 
l'infobrol
Nous sommes le Jeudi 19 Octobre 2017, 03:50, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)