Easy-Micro

LANGAGE Intro POO PHP
Surcharge PHP

Introduction à la programmation orientée objet en PHP

Surcharge de propriétés et de méthodes

En PHP, on dit qu'on surcharge une propriété ou une méthode d'une classe mère lorsqu'on la redéfinit dans une classe fille.

Pour surcharger une propriété ou une méthode, il va falloir la redéclarer en utilisant le même nom. Par ailleurs, si on souhaite surcharger une méthode, il faudra également que la nouvelle définition possède le même nombre de paramètres.

⚠ Impossible de surcharger des éléments définis comme private. De plus, la nouvelle définition doit obligatoirement posséder un niveau de restriction de visibilité égal ou plus faible

Pour rappel, voici le fichier classes/utilisateur.class.php
<?php
class Utilisateur{
        protected $user_name;
        protected $user_pass;
        
        public function __construct($n, $p){
            $this->user_name = $n;
            $this->user_pass = $p;
        }
        
        public function __destruct(){
            //Du code à exécuter
        }
        
        public function getNom(){
            return $this->user_name;
        }
    }
Notez que l'on a modifié le niveau d'accessibilité (c'est-à-dire la portée) de nos propriétés $user_name et $user_pass pour que la class fille puisse y accéder

Prenons immédiatement un exemple concret en surchargeant la méthode getNom() de notre classe parent Utilisateur dans notre classe étendue Admin.

Le fichier classes/admin.class.php
<?php
class Admin extends Utilisateur{
        protected $ban;
        
        // surcharge de la méthode getNom()
        public function getNom(){
            return strtoupper($this->user_name);
        }
        
        public function setBan($b){
            $this->ban[] .= $b;
        }
        public function getBan(){
            echo 'Utilisateurs bannis par '.$this->user_name. ' : ';
            foreach($this->ban as $valeur){
                echo $valeur .', ';
            }
        }
    }
Ajout de la méthode getNom en transformant le résultat renvoyé en majuscules grâce à la fonction strtoupper()

On aurais pu aussi surcharger le constructeur de la classe parent en définissant un nouveau constructeur dans la classe étendue.

Le fichier classes/admin.class.php
<?php
public function __construct($n, $p){
    $this->user_name = strtoupper($n);
    $this->user_pass = $p;
}

Fichier principal

utilisation de la méthode durchargée

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

     // instances de notre classe Utilisateur
     $Admin1 = new Admin('Mimi', 123456);
     $Utilisateur1 = new Utilisateur('Fifi', 'abcdef');
 
     echo 'Nom de l\'administrateur : '.$Admin1 -> getNom();
?>
</body>
</html>

-> Voir cet exemple Easy-Micro
« Prev - Intro POO PHP - Next »


< Page précédente INTRO POO PHP Page suivante >