Easy-Micro

LANGAGE Intro POO PHP
Constantes

Introduction à la programmation orientée objet en PHP

Constantes de classe

Une constante est un conteneur qui ne va pouvoir stocker qu’une seule et unique valeur durant la durée de l’exécution d'un script.

Pour définir une constante de classe, on va utiliser le mot clef const suivi du nom de la constante en majuscules. On ne va pas utiliser ici de signe $ comme avec les variables.

Ajoutons immédiatement une constante à notre classe mère Utilisateur : le prix d'un abonnement mensuel pour accéder au contenu de notre site.

Le fichier classes/utilisateur.class.php
<?php
class Utilisateur {
     protected $user_name;
     protected $user_pass;
     protected $user_region;
     protected $prix_abo;

     // ⚠ 'public' ne fonctionne qu'a partir de PHP 7.1
     public const ABONNEMENT = 15;

     // méthode d'affichage de la constante
     public function showConstant() {
     echo self::ABONNEMENT.' &euro;<br><br>';
     }
        
   
     public function __construct($n, $p, $r){
         $this->user_name = $n;
         $this->user_pass = $p;
         $this->user_region = $r;
     }
        
     public function __destruct(){
         //Du code à exécuter
     }
        
     public function getNom(){
         echo $this->user_name;
     }

     public function setPrixAbo(){
     /*On peut imaginer qu'on calcule un prix d'abonnement différent
                 selon les profils des utilisateurs*/
            if($this->user_region === 'Sud'){
                $this->prix_abo = self::ABONNEMENT / 2;
            } else {
                $this->prix_abo = self::ABONNEMENT;
            }
        }
        
        public function getPrixAbo(){
            echo $this->prix_abo.' &euro;';
        }
}
Deux nouvelles propriétés ($user_region et $prix_abo), une nouvelle constante de classe (ABONNEMENT) et deux nouvelles méthodes (setPrixAbo et getPrixAbo).

⚠ Si vous définissez un niveau de visibilité pour une constante, assurez-vous de travailler avec une version de PHP 7.1 ou ultérieure. Dans le cas où vous travaillez avec une version antérieure, la déclaration de la visibilité d'une constante sera illégale et le code ne fonctionnera pas.

Pour les objets de la classe Admin, on définit le prix de l'abonnement de base à 5. Dans notre classe, on modifie le constructeur pour y intégrer un paramètre "région" et on supprime également la méthode getNom() créée précédemment.

Le fichier classes/admin.class.php
<?php
    class Admin extends Utilisateur {
        protected $ban;
        public const ABONNEMENT = 5; // surcharge avec nouvelle valeur
        
        public function __construct($n, $p, $r){
            $this->user_name = strtoupper($n);
            $this->user_pass = $p;
            $this->user_region = $r;
        }
        
        public function setBan($b){
            $this->ban[] .= $b;
        }
        public function getBan(){
            echo 'Utilisateurs bannis par '.$this->user_name. ' : ';
            foreach($this->ban as $valeur){
                echo $valeur .', ';
            }
        }
        
        public function setPrixAbo(){
            if($this->user_region === 'Sud'){
                return $this->prix_abo = self::ABONNEMENT;
            }else{
                return $this->prix_abo = parent::ABONNEMENT / 2;
            }
        }
    }
?>
Nouvelle propriété et nouvelles méthodes

Enfin, on surcharge la méthode setPrixAbo() : si l'administrateur indique venir du Sud, le prix de son abonnement va être égal à la valeur de la constante ABONNEMENT définie dans la classe courante (c'est-à-dire dans la classe Admin).

Ici, self et parent nous servent à indiquer à quelle définition de la constante ABONNEMENT on souhaite se référer.

Fichier principal

Le fichier index.php
<!DOCTYPE html>
<html  lang="fr">
<head>
<title>POO PHP</title>
<meta charset="utf-8">
<link rel="stylesheet" href="css/mesStyles.css">
</head>
<body>
<h1>Inscription</h1>
<?php
     require 'classes/utilisateur.class.php';
     require 'classes/admin.class.php';

     $Admin1 = new Admin('Mimi', 'abcdef', 'Sud');
     $Admin2 = new Admin('Fifi', 123456, 'Nord');
     $Utilisateur1 = new Utilisateur('Dodo', 'abcdef', 'Est');

     echo 'Prix de l\'abonnement utilisateur ';
     $Utilisateur1->showConstant();

     $Admin1 -> setPrixAbo();
     $Admin2 -> setPrixAbo();
     $Utilisateur1 -> setPrixAbo();

     $u = 'Utilisateur'; // classe référencée en utilisant une variable

     // Pour accéder à notre constante ABONNEMENT depuis l'extérieur de la classe,
     // on est obligés de préciser le nom de la classe

     echo 'Valeur de ABONNEMENT dans Utilisateur : ' .$u::ABONNEMENT.' &euro;<br>';
     echo 'Valeur de ABONNEMENT dans Admin : ' .Admin::ABONNEMENT.' &euro;<br>';

     echo 'Prix de l\'abonnement pour ';
     $Admin1 -> getNom();
     echo ' : ';
     $Admin1 -> getPrixAbo();

     echo '<br>Prix de l\'abonnement pour ';
     $Admin2 -> getNom();
     echo ' : ';
     $Admin2 -> getPrixAbo();

     echo '<br>Prix de l\'abonnement pour ';
     $Utilisateur1 -> getNom();
     echo ' : ';
     $Utilisateur1 -> getPrixAbo();
?>
</body>
</html>

-> Voir cet exemple Easy-Micro


Flux RSS Easy-Micro - Abonnez-vous Easy-Micro [ François Bisch ]