Créer une classe



Pour nos exemples, nous allons imaginer que nous créons une classe Membre qui représente un membre de notre site. Nous pourrons charger ce membre à partir des informations enregistrées en base de données, lui demander son pseudonyme, sa date d'inscription, mais aussi le bannir, le déconnecter du site, etc.

Le code d'une classe étant en général assez long, il est recommandé de créer un fichier PHP qui contiendra uniquement la définition de la classe et que l'on inclura à chaque fois qu'on en a besoin. Je vous recommande de créer un fichier nommé Membre.class.php.


Les développeurs PHP ont l'habitude de donner l'extension .class.php à leurs fichiers contenant des classes pour bien les distinguer.
Quelques règles à ce sujet : ne définissez qu'une classe par fichier et donnez au fichier le même nom que votre classe. Le nom de votre classe devrait par ailleurs commencer par une majuscule.

Dans ce fichier Membre.class.php, commencez par inscrire le code suivant :

<?php

class Membre

{

 

}

?>


Étant donné que notre fichier ne contiendra que du code PHP, il est possible (et même recommandé par des développeurs expérimentés !) de retirer la balise de fermeture ?> à la fin du fichier. Cela peut paraître surprenant, mais c'est en fait un moyen efficace d'éviter d'insérer des lignes blanches à la fin du code PHP, ce qui a tendance à produire des bogues du type « Headers already sent by ».

À l'intérieur des accolades, nous allons définir des variables et des fonctions membres de la classe. Un point de vocabulaire à ce sujet : certains développeurs utilisent d'autres mots pour désigner les variables et fonctions membres des classes. Les voici :

  • variables membres : aussi appelées attributs ou propriétés ;
  • fonctions membres : aussi appelées méthodes.


Essayons maintenant de définir ensemble quelques variables et fonctions dans la classe Membre.


Les variables membres


Les variables permettent de définir l'objet : c'est ce qui fait qu'il sera unique. Alors, qu'est-ce qui représente un membre ? Essayons de définir quelques-unes de ses propriétés. Si on en oublie ce n'est pas grave, on pourra toujours en rajouter par la suite. Un membre a :

  • un pseudonyme ;
  • une adresse e-mail ;
  • une signature ;
  • un statut (actif ou non, selon que son compte a été validé ou banni).


Nous allons stocker toutes ces informations dans des variables sous forme de texte. Complétez votre classe en rajoutant ces variables :

<?php

class Membre

{

    private $pseudo;

    private $email;

    private $signature;

    private $actif;

}

?>


Nous indiquons que notre classe Membre est composée de quatre variables : $pseudo$email,$signature et $actif. Pour l'instant, elles ne possèdent aucune valeur.

Pour le moment, ne vous préoccupez pas du mot-clé private devant ces noms de variables, je vous expliquerai un peu plus loin ce que cela signifie. ;-)


Les fonctions membres


Maintenant que nous avons défini les variables, nous pouvons créer quelques fonctions. Leur rôle sera :

  • soit de lire ou mettre à jour les variables. On parle de fonctions getters et setters ;
  • soit d'exécuter des actions plus complexes sur le membre (comme lui envoyer un e-mail).

Les getters et setters


Ce sont des fonctions qui commencent par get (si l'on veut récupérer le contenu d'une variable) ou par set (si l'on veut modifier le contenu d'une variable).

Prenons par exemple le pseudonyme : on va créer une fonction getPseudo qui renvoie le pseudo et setPseudo qui modifie ce dernier.

<?php

class Membre

{

    private $pseudo;

    private $email;

    private $signature;

    private $actif;

     

    public function getPseudo()

    {

        return $this->pseudo;

    }

     

    public function setPseudo($nouveauPseudo)

    {

        $this->pseudo = $nouveauPseudo;

    }

}

Nous avons donc deux fonctions qui permettent de manipuler le pseudonyme du visiteur. Comme vous le voyez, elles sont vraiment très simples. Ainsi, getPseudo renvoie le pseudo :


<?php

public function getPseudo()

{

    return $this->pseudo;

}

?>


La variable $pseudo est accessible dans les fonctions avec le préfixe $this->. Cela signifie : « Le pseudo de cet objet ». En effet, souvenez-vous, on peut créer plusieurs objets à partir d'une classe. Il peut y avoir plusieurs membres et chacun d'eux a un pseudo différent. Le préfixe $this-> permet d'indiquer que c'est bien le pseudonyme du membre sur lequel on travaille que l'on veut récupérer.

On fait de même avec une fonction setPseudo qui prend en paramètre le nouveau pseudo du membre et qui le place dans $this->pseudo.


Ces fonctions sont très simples et un peu inutiles, non ?


En fait, les getters et setters sont souvent des fonctions simples, mais l'intérêt est qu'on peut faire des calculs et des vérifications sur les données. Par exemple, on pourrait améliorer la fonction setPseudo comme ceci :

<?php

public function setPseudo($nouveauPseudo)

{

    // Vérifier si le nouveau pseudo n'est ni vide ni trop long

    if (!empty($nouveauPseudo) AND strlen($nouveauPseudo) < 15)

    {

        // Ok, on change son pseudo

        $this->pseudo = $nouveauPseudo;

    }

}

?>


Ainsi, on autorise le changement de pseudonyme uniquement s'il correspond à certains critères : pseudo non vide et longueur inférieure à quinze caractères. On pourrait profiter de cette fonction pour vérifier aussi la présence de caractères non autorisés.

L'intérêt de passer par une fonction pour modifier les variables est donc de pouvoir contrôler que l'on n'insère pas n'importe quoi. Pour l'adresse e-mail, on pourrait ainsi vérifier que celle-ci a la forme d'une véritable adresse e-mail (on pourrait utiliser une expression régulière !).


Les autres fonctions


Bien entendu, nous pouvons introduire n'importe quel autre type de fonction dans la classe Membre et pas seulement des fonctions qui se contentent de modifier les variables. À nous de décider quelles actions on veut pouvoir effectuer sur le membre : le bannir, lui envoyer un e-mail…

<?php

class Membre

{

    public function envoyerEMail($titre, $message)

    {

        mail($this->email, $titre, $message);

    }

     

    public function bannir()

    {

        $this->actif = false;

        $this->envoyerEMail('Vous avez été banni', 'Ne revenez plus !');

    }

     

    ...

}

?>


La fonction envoyerEMail est toute simple : elle utilise la fonction mail() de PHP qui permet d'envoyer un e-mail, et se base sur l'adresse e-mail stockée dans l'objet ($this->email).

D'autre part, la fonction bannir() change le statut actif du membre pour indiquer qu'il n'est plus actif et lui envoie un e-mail pour l'avertir de son bannissement. On en profite pour réutiliser la fonctionenvoyerEMail() de notre classe. Vous remarquerez qu'on doit placer là aussi le préfixe $this-> devant le nom d'une fonction de la classe qu'on appelle.

C'est dans l'esprit de la programmation orientée objet : on réutilise du code déjà écrit pour éviter de réinventer la roue à chaque fois.

Créé avec HelpNDoc Personal Edition: Mettez à niveau sans effort vos fichiers d'aide WinHelp HLP vers CHM avec HelpNDoc