Page 1 sur 1

heritage, fonction static et "self"

Posté : 11 janv. 2007, 20:10
par OvEr
Bonjour, j ai un petit problème auquel il doit exister des millions de solution mais je cherche la plus propre :)


Mon probleme :
class classeA {

function __construct(){}

public static function methodA()
{
$object = new self;
echo get_class( $object );
}
}

class classeB extends classeA {

function __construct(){}
}

classeB::methodA();

//Affiche :
//classeA

Alors que je passe par la classeB pour l'appeler...
Comment dois-je faire pour recuperer le bon nom de classe sans passer quoi que ce soit en parametre ?

Posté : 11 janv. 2007, 20:46
par Xenon_54
parent?

Posté : 11 janv. 2007, 20:47
par OvEr
Non, Parent c classeA si g t dans classeB mais la c est le contraire presque.

Posté : 11 janv. 2007, 22:12
par Cyrano
Modération :
OvEr, nous sommes dans un forum francophone.
Tu as devant toi un clavier complet et tu disposes de la place que tu désires pour écrire.
Merci de rédiger tes messages dans un français intelligible pour tous.
Ce sera bénéfique pour ta demande d'aide.

Merci de prendre le temps de lire les règlements.

Posté : 11 janv. 2007, 22:17
par Xenon_54
self serait alors approprié non?

Posté : 12 janv. 2007, 03:16
par the dreamer
Vu que la fonction get_class est appelée à partir de la classe parent, n'est-il pas normal qu'il retourne le nom de la classe parent ?? :wink:

Posté : 12 janv. 2007, 05:44
par Xenon_54
Pour l'instant, il n'y a aucun moyen de déterminer à partir de quelle classe une méthode statique a été appellée.

Voir les commentaires sur php.net:
Seems like static function always belong to its class.
I have been thus far unable to determine a reliable way to get the actual class from a static method.
http://www.php.net/get_class

Posté : 12 janv. 2007, 10:13
par titerm
Il n'y a pas de d'évaluation faite sur les membres static, tout les références sont effectué a la compile.

voir ici pour les évolutions possible.


voir la doc de static
http://fr.php.net/manual/fr/language.oop5.static.php
En fait, les appels de méthodes statiques sont résolus au moment de la compilation. Lorsque l'on utilise un nom de classe explicite, la méthode est déjà identifiée complètement et aucune notion d'héritage n'est appliquée. Si l'appel est effectuée par le mot clé self, alors self est traduit en la classe courante, qui est la classe appartenant au code. Ici aussi, aucune notion d'héritage n'est appliquée.


Pas de solution à ton problème.

Posté : 12 janv. 2007, 12:02
par Invité
Merci pour le lien et désolé pour le style SMS.