par
katagoto » 05 juil. 2008, 12:00
Bonjours à toutes et tous,
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 :
Test 2 :
ligne 2
ligne 3
ligne 4
ligne 5
Et si je fais :
$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 :
[1] - ligne 2
[2] - ligne 3
[3] - ligne 4
[4] - ligne 5
Voilà un bout de ma class :
<?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...
Bonjours à toutes et tous,
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]<?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>";
}
[/php]
Ca m'affiche :
[quote]Test 2 :
ligne 2
ligne 3
ligne 4
ligne 5[/quote]
Et si je fais :
[php]$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>";
}[/php]
J'ai ça :
[quote][1] - ligne 2
[2] - ligne 3
[3] - ligne 4
[4] - ligne 5[/quote]
Voilà un bout de ma class :
[php]<?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;
}
}
?>[/php]
Voilà, mes tapleaux sont bon pourtant...
Par avance merci de votre aide...