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;
}
}
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 .', ';
}
}
}
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