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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 retourretour)
- 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.Warning: Call to protected Sgl::__destruct() from context '' during shutdown ignored in Unknown on line 0
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![]()
Partager