<?php
 // === Classe Abstraite Personne ===
 abstract class Personne
 { // -- Les propriétés --
   protected $nom    ;
   protected $prenom ;
   // getters et setters
   public function setNom($nom){$this->nom = $nom;}
   public function getNom(){return $this->nom;}
   public function setPrenom($nom){$this->prenom = $prenom;}
   public function getPrenom(){return $this->prenom;}
   // Méthode abtraite
   abstract function Affiche();
 }
 // === Classe Personnel ===
 class Personnel extends Personne
 { // -- Les propriétés--
   protected $matricule   ;
   // -- constructeur --
   function __construct($m,$n,$p)
   { $this->matricule = intval(trim($m))     ;
     $this->nom       = strtoupper(trim($n)) ;
     $this->prenom    = strtoupper(trim($p)) ;
   } 
   public function Affiche() {
     echo "Nom:".$this->nom;
     echo "  -  Prenom: ".$this->prenom;
     echo "  -  Matricule: ".$this->matricule.PHP_EOL;
   } 
 }
 // === Classe Client ===
 class Client extends Personne
 { // -- Les propriétés --
   protected $adresse   ;
   // -- constructeur --
   function __construct($n,$p,$a)
   { $this->nom       = strtoupper(trim($n)) ;
     $this->prenom    = strtoupper(trim($p)) ;
     $this->adresse   = strtoupper(trim($a)) ;
   } 
   public function Affiche() {
     echo "Nom: ".$this->nom;
     echo "  -  Prénom: ".$this->prenom;
     echo "  -  Adresse: ".$this->adresse.PHP_EOL;
   } 
 }
 // === Programme ===
 $UnSalarie = new Personnel(324152,"martin","pierre") ;
 echo "--- Salarie ---".PHP_EOL;
 $UnSalarie->Affiche() ;//Méthode de la Classe Personnel
 $UnClient = new Client("leroy","patrick","12 av Michelet 75004 Paris") ;
 echo "--- Client ---".PHP_EOL;
 $UnClient->Affiche() ;//Méthode de la Classe Client
?>