Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Les classes en PHP - Partie 1

Compatible PHP 5. Cliquer pour en savoir plus sur les compatibilités.Par Xeon (Florian Ronzi), le 13 février 2009

Bonjour à tous,
Pour mon premier article je vais faire un tour d’ensemble des classes en PHP, point essentiel de la programmation orientée objet (POO).

Définition
Une classe est un des concepts de base de la programmation orientée objet. On appelle classe un ensemble d’objets partageant certaines propriétés (les méthodes et les attributs).
Cf. Wikipédia


Le principal objectif de la POO est de regrouper dans un objet un ensemble de données (variables) et de fonctionnalités (fonctions) réalisant des taches similaires.

Définition
Un objet représente un concept, une idée ou toute entité du monde physique, comme une voiture, une personne ou encore une page d’un livre.
Cf. Wikipédia


Comment faire ?

Passons maintenant au cœur du problème, comment créer ma propre classe ?

Code

class Email {
 
}


Bravo ! Vous avez créé votre première classe intitulé Email.
Bon, on ne va quand même pas en rester là, ça serait dommage.

Comme dit précédemment, nous allons implémenter quelques fonctionnalités dans notre classe.

Les fonctions principales

* Le constructeur, il s’agit de la toute première fonction qui se lance à l’instanciation de la classe :

Code

class Email {
 
      public function __construct(){
 
            /* Classe Instanciée */
 
      }
 
}


Nous pouvons donc maintenant utiliser notre première classe :

Code

$classe = new Email();


Tout comme n’importe qu’elle fonction, il est possible de faire passer des variables que l’on stockera dans des variables internes à la classe ainsi que d’en créer par défaut:

Code

class Email {
 
      private $nb = 0; 
 
      private $sujet;
 
      private $message;
 
      private $expediteur;
 
      public function __construct($sujet, $message, $expediteur){
 
            $this->sujet = $sujet;
 
            $this->message = $message;
 
            $this->expediteur = $expediteur;
 
      }
 
}


Nous pouvons donc maintenant instancier notre classe comme cela :

Code

$classe = new Email("Contact", "comment vas-tu ?", "nom@domaine.com");



* Le destructeur, il s’agit de la dernière fonction exécutée avant la destruction de la classe :

Code

class Email {
 
      private $nb = 0;
 
      private $sujet;
 
      private $message;
 
      private $expediteur;
 
      public function __construct($sujet, $message, $expediteur){
 
            $this->sujet = $sujet;
 
            $this->message = $message;
 
            $this->expediteur = $expediteur;
 
      }
 
      public function __destruct(){
 
            echo $this->nb." email envoyé";
 
      }
 
}


On aura donc :

Code

$classe = new Email("Contact", "comment vas-tu ?", "nom@domaine.com");
 
unset($classe); // Affichera 0 email envoyé


Dès lors il est important de savoir qu’une fonction peut ou non retourner une valeur, peut également ou non écrire dans la page.
Attention : le constructeur retourne toujours true !

Les fonctions secondaires

Il est ainsi envisageable de créer autant de fonctions que l’on désire :

Par exemple nous voulons récupérer le nombre d’email envoyé, le sujet de l’email :

Code

class Email {
 
      private $nb = 0;
 
      private $sujet;
 
      private $message;
 
      private $expediteur;
 
      public function __construct($sujet, $message, $expediteur){
 
            $this->sujet = $sujet;
 
            $this->message = $message;
 
            $this->expediteur = $expediteur;
 
      }
 
      public function __destruct(){
 
            echo $this->nb." email envoyé";
 
      }
 
      public function getNb(){
 
            return $this->nb;
 
      }
 
      public function getSujet(){
 
            return $this->sujet;
 
      }
 
}


Le résultat sera la suivant :

Code

$classe = new Email("Contact", "comment vas-tu ?", "nom@domaine.com");
 
echo $classe->getNb(); // 0
 
echo $classe->getSujet(); // Contact 



Les propriétés

Comme vous pouvez le voir depuis le début, sans savoir pourquoi, chaque fonction et variable composant une classe est précédée d’un mot très important.
Il peut prendre 3 valeurs :

* Public : Aucune restriction possible, la propriété est accessible depuis l’extérieur de la classe.
Important : Le constructeur et le destructeur doivent absolument être public.

* Private : Il est strictement impossible d’accéder depuis l’extérieur de la classe à la propriété.

* Protected : C’est le même cas de figure à la seule différence qu’il est possible d’y accéder par héritage (Nous en parlerons dans la deuxième partie de cet article).

Résultat

Nous pouvons donc terminer notre classe en ajoutant une fonction privée permettant d’envoyer l’email, une public vérifiant le destinataire, ainsi que les fonctions de modification et d’acquisition des variables privées de la classe.

Code

class Email {
 
      private $nb = 0;
 
      private $sujet;
 
      private $message;
 
      private $expediteur;
 
      private $destinataire;
 
      public function __construct($sujet, $message, $expediteur){
 
            $this->sujet = $sujet ;
 
            $this->message = $message;
 
            $this->expediteur = $expediteur;
 
      }
 
      public function __destruct(){
 
            echo $this->nb." email envoyé";
 
      }
 
      public function getNb(){
 
            return $this->nb;
 
      }
 
      public function getSujet(){
 
            return $this->sujet;
 
      }
 
     public function getMessage(){
 
            return $this->message;
 
      }
 
     public function getExpediteur(){
 
            return $this->expediteur;
 
      } 
 
     public function setSujet($sujet){
 
             $this->sujet = $sujet;
 
      }
 
     public function setMessage($message){
 
             $this->message = $message;
 
      }
 
     public function setExpediteur($expediteur){
 
            $this->expediteur = expediteur;
 
      }
 
      public function envoyer($destinataire){
 
            if(empty($destinataire)){
 
                  return false;
 
            }else{
 
                 $this->destinataire = $destinataire;
 
                 return $this->envoyer_email();
 
            }
 
      }
 
      private function envoyer_email(){
 
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
            $headers .= 'From: '.$this->expediteur.' <'..$this->expediteur.'>' . "\r\n";
 
            $headers .= 'Reply-To: '.$this-> expediteur.'' . "\r\n";
 
            $headers .= 'X-Mailer: PHP/' . phpversion();
 
            if(mail($this->destinataire, $this->sujet, $this->message, $headers)){
 
                  $this->nb++;
 
                 return true;
 
            }else{
 
                  return false;
 
            }
 
     }
 
}


Code

$classe = new Email("Contact", "comment vas-tu ?", "nom@domaine.com");
 
if($classe->envoyer("ami@domaine.com")){
 
      echo $this->getNb()." email a été envoyé!";
 
}else{
 
      echo "Une erreure est survenue!";
 
}



Conclusion

Voilà nous aurons appris au travers de cette première partie comment réaliser une classe simple d’envoi d’email en parcourant les points suivants :

* Constructeur, Destructeur
* Propriétés publics et privées
* Stocker, récupérer et modifier des variables internes à la classe

AlienFX, aka Xeon