IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Traduction de new static; pour V5.2 ? [PHP 5.2]


Sujet :

Langage PHP

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Traduction de new static; pour V5.2 ?
    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

    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;
        }
    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
     
    final static public function getInstance()
        {
    	if(is_null(self::$instance)) {
    		self::$instance = new Singleton();
    	}
    	return self::$instance;
        }
    Souci : Lorsque DB_Manager fait appel à getInstance(), alors l'objet n'est plus de type DB_Manager mais Singleton.
    Alors j'ai tenté autre chose :

    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;
        }
    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.

    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.
    Dernière modification par Invité ; 06/04/2010 à 16h38.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. New DirectoryInfo() pour :\\serveur\?
    Par EE dans le forum ASP.NET
    Réponses: 16
    Dernier message: 16/06/2007, 13h09
  2. traduction /n en <\ br> pour textarea
    Par franfr57 dans le forum Langage
    Réponses: 3
    Dernier message: 30/04/2007, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo