Forum Programmation.php ReflectionObject dans un contexte statique

Posté par  .
Étiquettes : aucune
0
11
août
2008

Bonjour,

je voudrais utiliser le concept de réflexion, mais dans un contexte statique.



Dans un contexte d'instance, c'est facile :




class Generic
{
public function __construct()
{

}

function getInstance()
{
$instance = new ReflectionObject($this);
echo "méthode appelée par une instance de : ".$instance->getName();
}
}

class Specific extends Generic
{

}

function main()
{
$o = new Specific();
$o->getInstance();
}

main();


Ce code va afficher :




méthode appelée par une instance de Specific


Jusque là pas de problème.



Sauf que moi, je veux un main() de ce genre :




function main()
{
Specific::getInstance();
}


Et je veux que getInstance m'affiche la même chose.



Autrement dit, lorsque j'appelle getInstance() de la manière XXX::getInstance(), je voudrais quegetInstance() arrive à récupérer XXX.



Bien entendu, tel quel ça ne marche pas, $this étant null dans new ReflectionObject($this)




Warning: ReflectionObject::__construct() expects parameter 1 to be object, null given


J'ai lu la doc, mais ça ne m'a pas éclairé...


http://fr.php.net/manual/fr/language.oop5.reflection.php

Vos idées et conseils sont les bienvenus !

  • # Appel statique

    Posté par  . Évalué à 3.

    En statique comme tu t'en est rendu compte n'est pas disponible vu qu'il pointe vers l'instance qui n'existe pas. Par contre self lui pointe vers la classe.

    Essaye de remplacer le $this par un self.
    • [^] # Re: Appel statique

      Posté par  . Évalué à 2.

      salut Jean,

      malheureusement, self est reconnu comme une chaine de caractères ici, et non comme référence sur la classe.

      A priori, je peux arriver à faire ce que je veux avec __callStatic

      http://fr.php.net/__call

      Mais il faut minimum php 5.3, et moi je suis encore sous php 5.2.4-2.

      Mais le concept est puissant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.