Je vais faire deux topic, car j'ai deux problèmes pour une class, pour tenté de respecter la règle du forum...
Voilà, j'ai une class de gestion de cache qui à pour parent Itertor, seulement, voilà mon proble, il saute systèmatiquement le premier couple clef/valeur, exemple :
Si je fais ça :
<?php
include("Kache.php");
$cache=new Kache("test");
$tableau=array("ligne 1", "ligne 2", "ligne 3", "ligne 4", "ligne 5");
$cache->genere($tableau, false);
echo "<p><p><p>Test 2 :</p>";
foreach ($cache as $valeur) {
echo "<p>".$valeur."</p>";
}
Ca m'affiche :
Et si je fais :Test 2 :
ligne 2
ligne 3
ligne 4
ligne 5
$cache->detruit(true);
$tableau2=array("clef 1" => "ligne 1", "clef 2" => "ligne 2", "clef 3" => "ligne 3", "clef 4" => "ligne 4", "clef 5" => "ligne 5");
$cache->genere($tableau, false);
echo "<p><p><p>Test 3 :</p>";
foreach ($cache as $clef => $valeur) {
echo "<p><b>[".$clef."]</b> - ".$valeur."</p>";
}
J'ai ça :
Voilà un bout de ma class :[1] - ligne 2
[2] - ligne 3
[3] - ligne 4
[4] - ligne 5
<?php
class Kache implements Iterator {
//...
// Variables pour les fonctions itératrices
private $clef=array();// Les clefs
private $valeur=array();// Les valeurs
private $index=0; // L'index
//...
public function genere($contenu=NULL, $existe=true)
{
$existe=(bool) $existe;
if (!$existe) {
if(!empty($contenu)){
$this->cache=$contenu;
}
else {
die("Veuillez stipuler un contenu");
}
}
else {
if(!empty($contenu)){
$this->cache=$contenu;
}
else {
die("Veuillez stipuler un contenu");
}
}
$this->test_tableau();
// utilisation de serialize() pour transformer $content en chaine de caractères
$contenu_serialize = serialize($this->cache);
// échappement les caractères spéciaux pour pouvoir mettre le tout entre quotes dans le futur fichier
$contenu_serialize = str_replace(array('', "'", "0"), array('\\', '\'', '0'), $contenu_serialize);
// création du code php à stocker dans le fichier
$contenu_serialize = "<?php" . "\n" . '$cache = unserialize("' . $contenu_serialize . '");' . "\n" . '?>';
// écriture du code dans le fichier
$fichier = fopen($this->chemin_cache.$this->nom.$this->extention, 'w');
$resultat = fwrite($fichier, $contenu_serialize);
fclose($fichier);
// renvoie true si l'écriture du fichier a réussi
return $resultat;
}
//...
private function test_tableau(){
if(is_array($this->cache)){
foreach ($this->cache as $clef => $valeur) {
$this->clef[]=$clef;
$this->valeur[]=$valeur;
}
return true;
}
return false;
}
// Les fonctions Itératrices (pour les boucles)
public function current(){
return $this->valeur[$this->index];
}
public function next(){
$this->index+1;
}
public function valid(){
return ($this->index++ < (count($this->clef)-1));
// si je fais return ($this->index++ <= count($this->clef));
// J'ai deux ligne de trop au test 3 du tyle [0] -
}
public function key(){
return $this->clef[$this->index];
}
public function rewind(){
$this->index=0;
}
}
?>
Voilà, mes tapleaux sont bon pourtant...Par avance merci de votre aide...