Bien le bonjour,
Voici, j'ai un souci pour transcrire un code compatible PHP 5.3.1 pour une version 5.2.6.
Le contexte est une classe de Singleton. J'ai deux classes qui en sont étendues DB_Manager et Catalogue afin, comme vous le savez, d'avoir une instance unique de ces classes dans tout le code.
Lorsque j'ai codé avec Xampp, il n'y avait pas de troubles mais voilà lors de la migration vers le serveur de production, ce dernier était en version 5.2.6.
Du coup, la syntaxe ?: n'était pas compris, pas de troubles je remplace mais dans la classe Singleton j'ai un new static; que je ne vois pas par quoi remplacer pour continuer à avoir un code correct.
Voici le code de la méthode getInstance() du Singleton
J'ai tenté de remplacer par ce code-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 protected static $instance = null; final static public function getInstance() { if(is_null(self::$instance)) { self::$instance = new static; } return self::$instance; }
Souci : Lorsque DB_Manager fait appel à getInstance(), alors l'objet n'est plus de type DB_Manager mais Singleton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 final static public function getInstance() { if(is_null(self::$instance)) { self::$instance = new Singleton(); } return self::$instance; }
Alors j'ai tenté autre chose :
Autre trouble, comme on ne passe pas par le constructeur des classes, je ne peux savoir quelle est la classe qui a appelé la méthode. Le $this de get_class est inconnu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 final static public function getInstance() { if(is_null(self::$instance)) { $class = get_class($this); self::$instance = new $class(); } return self::$instance; }
Certes, je pourrais faire des singletons à l'intérieur des classes DB_Manager et Catalogue mais automatiser le concept des singletons serait un plus.
Un check sur la ReflectionClass aurait-elle été la panacée ? Humm, j'ai un doute car toujours dans le contexte du static un $this->getName() n'est pas autorisé...
Voyez-vous une issue négociable ?
Au plaisir.
Steve.



Répondre avec citation
Partager