<?php
 // === Classe Personnel ===
 class Personnel implements Iterator
 { // -- Les propriétés --
   private $TabProp = array();
   // -- Constructeur --
   function __construct($TP) { 
     $TP['nom']   = strtoupper(trim($TP['nom']));
     $TP['prenom']= strtoupper(trim($TP['prenom']));
     $TP['tel']   = trim(trim($TP['tel']))      ;     
     $TP['age']   = intval($TP['age'])          ;
     $this->TabProp=$TP;
   }
   public function rewind(){
     echo "..rembobinage\n";
     reset($this->TabProp);
   }
   public function current() {
     $TabProp = current($this->TabProp);
     echo "..actuel : ".$TabProp.PHP_EOL;
     return $TabProp;
   }
   public function key() {
     $TabProp = key($this->TabProp);
     echo "..clé : $TabProp".PHP_EOL;
     return $TabProp;
   }
   public function next() {
     $TabProp = next($this->TabProp);
     echo "..suivant : $TabProp".PHP_EOL;
     return $TabProp;
   }
   public function valid() {
     $clef = key($this->TabProp);
     $TabProp = ($clef!==NULL) && ($clef!==FALSE);
     echo "..valide : $TabProp".PHP_EOL;
     return $TabProp;
   }
 }
 // === Programme ===
 $prop=array('nom'=>"dupont",'prenom'=>"jean",'tel'=>"0143112233",'age'=>45);
 $UnePersonne = new Personnel($prop);
 echo "-- Parcours via Iterator avec while --".PHP_EOL;
 $UnePersonne->rewind();
 while ($UnePersonne->valid()) {
   echo "----->".$UnePersonne->key()." : ".$UnePersonne->current().PHP_EOL;
   $UnePersonne->next();
 } 
?>
