<?php
 // === Trait TraitGestCont ===
 trait TraitGestCont  {
   // -- Les propriétés --
   protected $TabCont = array();
   // -- Les méthodes --
   public function setCont($id,$type,$date) {
     $id   = trim($id)              ;     
     $type = strtoupper(trim($type));     
     $date = trim($date)            ; 
     $this->TabCont[]=array('id'=>$id,'type'=>$type,'date'=>$date);
   }
   public function getCont($id) {
     unset($listeR);
     foreach($this->TabCont as $etiquette=>$unControl){
       if ($unControl['id']==$id) {$listeR[]=$unControl;}
     }     
     return $listeR;
   }
   public function AfficheC($id) {
    $listeDesControles=$this->getCont($id);
    echo "Liste des accès : ".PHP_EOL;
    foreach($listeDesControles as $num => $unControl) {
      echo "   ".$unControl['id']." - ".$unControl['type']." - ".$unControl['date'].PHP_EOL;
    }
   } 
 }
 // === Classe Personnel ===
 class Personnel
 { // -- Les propriétés --
   protected $TabVars = array();
   // Utilisation du trait TraitGestCont
   use TraitGestCont;
   // Méthode setVar
   public function setVar($id,$nom,$prenom) {
     $id     = intval(trim($id))        ;     
     $nom    = strtoupper(trim($nom))   ;
     $prenom = strtoupper(trim($prenom));
     $this->TabVars[$id]=array('nom'=>$nom,'prenom'=>$prenom);
   }
   // Méthode getVar
   public function getVar($id) {
     return $this->TabVars[$id];
   }
   public function AfficheP($id) {
     $une_personne=$this->getVar($id);
     echo $id." : ".$une_personne['nom']." - ".$une_personne['prenom'].PHP_EOL;
   } 
 }
 // === Classe Livraison ===
 class Livraison
 { // Utilisation du trait TraitGestCont
   use TraitGestCont;
 }
  // === Programme ===
 // Création salarié et affectation des contrôles d'accès
 $UnSalarie = new Personnel() ;
 $UnSalarie->setVar(324152,"martin","pierre");
 $UnSalarie->setCont(324152,"E","12/11/2015-09:43:00");
 $UnSalarie->setCont(324152,"S","12/11/2015-18:30:00");
 $UnSalarie->setCont(324152,"E","13/11/2015-08:30:00");
 $UnSalarie->setCont(324152,"S","13/11/2015-17:45:18");
 // Création d'une livraison et affectation  contrôles d'accès
 $UneLiv = new Livraison() ;
 $UneLiv->setCont("CopieExpress","E","12/11/2015-09:43:00");
 $UneLiv->setCont("CopieExpress","S","12/11/2015-09:45:00");
 // Affichage salarié
 echo "--- Salarié ---".PHP_EOL;
 $UnSalarie->AfficheP(324152) ;//Méthode Classe Personnel
 $UnSalarie->AfficheC(324152) ;//Méthode Classe Personnel
 // Affichage livraison
 echo "--- Livraison ---".PHP_EOL;
 $UneLiv->AfficheC("CopieExpress") ;//Méthode Classe Livraison
?>
