Vous êtes sur la page 1sur 8

Implémentation des classes en PHP

Exemple 1 :
class Personne
{

// Attribut
public $nom;
public $prenom;
private $dateNaissance;
private $salaire;
public $nbEnfant;

// Constructeur
function __construct($nom, $prenom, $dateNaissance, $nbEnfant = 0)
{
$this->nom = $nom;
$this->prenom = $prenom;
$this->dateNaissance = $dateNaissance;
$this->nbEnfant = $nbEnfant;
}

// Mutateurs
public function setSalaire($valeur)
{
$this->salaire = $valeur;
}

// Accesseur
public function getSalaire()
{
return $this->salaire;
}

// Méthode
public function identite(){
return $this->nom . " " . $this->prenom;
}

// Méthode
public function age()
{
// Implémentation
}

// Méthode
public function argentPoche()
{
// Implémentation
}
}
class Mammifere {
private $vertebre = true;

public function print() {


echo "Je suis un mammifère";
}

public function manger(){


echo "Je mange";
}
}

// Humain hérite de Mammifere


class Humain extends mammifere {
private $prenom = "";

function __construct($prenom)
{
parent::__construct();
this->$prenom = $prenom;
}

public function manger(){


echo "Je suis omnivore";
}
}

$unHumain = new Humain("Valentin");


$unHumain->print(); // Je suis un mammifère.
$unHumain->manger(); // Je suis omnivore

Exemple 2 :
• Combien avons-nous de classe instantiable ?
• Pourquoi l'héritage est intéressant ici ?
• Lire l'UML :
o Combien de propriétés possède un Ordinateur.
o Combien de propriétés possède un PC.
o Et le Mac ?

abstract class Ordinateur {


protected nom;
protected dateFabrication;
protected prix;

abstract public function Acheter();


abstract public function Vendre();

public age(){
return date('Y') - $this->dateFabrication;
}

public toString(){
return "{$this->nom}, {$this->dateFabrication}";
}
}
Question 1

Écrire le code de la classe Mac :

• La méthode Acheter retourne le prix de vente.


• La méthode Vendre retourne :
o Le prix - (age * 100).
o Pour un Mac ARM : Le prix - (age * 50).

Question 2

La méthode toString est utilisée pour afficher le contenu des étagères dans l'interface
Web. Pour améliorer la lisibilité de l'interface, il vous ait demandé de spécialiser la
méthode toString pour afficher par exemple :

- [APPLE] Ordinateur1, 01-02-2021, Type ARM.


- [APPLE] Ordinateur2, 01-01-2021, Type Intel.

• Écrire le code permettant de répondre à la problématique.


• Pourquoi une méthode spécialisée est-elle intéressante ici ?

Les classes abstraites :

• Ne peuvent pas être instanciées (pas de new).


• Sont des modèles pour d'autres classes.
• Permettent de factoriser du code.
• Doivent être héritée depuis une classe fille.
• Apporte une sécurité grâce à l'encapsulation.
<?php

// Classe abstraite, non instanciable


abstract class EtudiantAbstrait
{
// Force les classes filles à définir cette méthode
abstract protected function getBlahBlah();
abstract public function demarrerUneDiscussion($sujet);

// méthode commune
public function parler() {
print $this->getBlahBlah() . "\n";
}
}

// Classe fille, instanciable car concrète l'ensemble des méthodes possède du code
class EtudiantSIO extends EtudiantAbstrait
{
private $option = "SLAM";

protected function getBlahBlah() {


return "L'informatique c'est cool, je suis : {$this->option}";
}

public function demarrerUneDiscussion($sujet) {


return "Je vais vous parler de « {$sujet} »";
}
}

// Classe fille, instanciable car concrète l'ensemble des méthodes possède du code
class EtudiantSEN extends EtudiantAbstrait
{
private $competences = "SOUDER";

protected function getBlahBlah() {


return "L'électronique c'est cool, je connais comment {$this->competences}";
}

public function demarrerUneDiscussion($sujet) {


return "Je vais vous parler de « {$sujet} »";
}
}

// Instanciation
$class1 = new EtudiantSIO();
$class1->parler(); // L'informatique c'est cool, je suis : SLAM
echo $class1->demarrerUneDiscussion('La sécurité') ."\n"; // Je vais vous parler de « La sécurité »

// Le code suivant ne fonctionne pas car on ne peut pas instancier une classe abstraite
$class1 = new EtudiantAbstrait(); // Erreur, on ne peut pas instancier une classe abstraite

Redéfinition (Remplacement de méthode)


La redéfinition est la possibilité d’utiliser exactement la même signature pour définir
une méthode dans une classe mère et dans une classe fille. Contrairement à la
surcharge, la signature (nom et paramètre doivent être identiques).

class Animal{
// Reste de la classe
// …
public bruit(){
echo "BRUUUUIIIITTTT";
}

// Reste de la classe
// …
}

class Humain extends Animal {


// Reste de la classe
// …

public bruit(){
parent::bruit()
echo " (Oui mais compréhensible)";
}

// Reste de la classe
// …

$humain = new Humain();


$humain->bruit(); // BRUUUUIIIITTTT (Oui mais compréhensible)

Vous aimerez peut-être aussi