[Singleton] pb de compréhension
Bonjour,
J'ai créée une classe singleton, qui me semble avoir un problème: à chaque fois que je transmet le formulaire l'instance est remise à zéro.
Au lieu de récupérer une instance créée une fois pour toute, la classe singleton agit comme une classe qui ne l'est pas...
ci-dessous mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
<?php
// nom de fichier : bug_sgl.php
// recuperation valeur
Sgl::Instance()->Load();
echo "<html><head></head><body>";
echo "<br>Valeur de retour:(".Sgl::Instance()->mValeur.")";
echo "<form name=test action=bug_sgl.php method='get'>";
echo "<input type ='submit' value='envoi' name='toto' />";
echo "<input type ='hidden' value='retour' name='lavaleur' />";
echo "</form>";
echo "</body></html>";
class Sgl {
static protected $mInstance;
static public $mCompteur;
public $mValeur;
protected function __construct( ) { }
protected function __destruct( ) { echo"<br> bye bye"; }
public function Instance() {
self::$mCompteur++;
if( is_null(self::$mInstance) ){
self::$mInstance = new Sgl();
echo "<br>Sgl:::Creation de l'instance n°(".self::$mCompteur.")";
} else {
echo "<br>Sgl::Récupération de l'instance n°(".self::$mCompteur.")";
}
return self::$mInstance;
}
public function Load() {
$this->mValeur = isset($_GET['lavaleur']) ? $_GET['lavaleur'] : null ;
}
}
?> |
l'affichage en sortie donne :
Sgl:::Creation de l'instance n°(1)
Sgl::Récupération de l'instance n°(1)
Valeur de retour:(retour)
Citation:
Warning: Call to protected Sgl::__destruct() from context '' during shutdown ignored in Unknown on line 0
- le compteur initialisé dans la classe sert de marqueur, il n'est incrémenté qu'une fois. Le problème c'est qu'il ne devrait pas l'être à envoi de formulaire.
Mes questions :
- Comment faire pour avoir un comportement du singleton habituel (l'instance est créée une seule fois) ?
- Comment éviter l'appel au destructeur ?
Merci de vos réponses ;)