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 Jean B . Évalué à 3.
Essaye de remplacer le $this par un self.
[^] # Re: Appel statique
Posté par santos . Évalué à 2.
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.