Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2063 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Connaitre le nom d'une classe enfant (sans l'instancier)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Connaitre le nom d'une classe enfant (sans l'instancier)

n°1803078
Gat$
http://www.wowteamfinder.com
Posté le 22-10-2008 à 11:00:53  profilanswer
 

Bonjour,
 
j'ai une classe "Common"
 
et plusieurs classes enfant héritant de la classe Common.
 
On va prendre l'exemple de la classe "Membre" qui hérite donc de la classe common.
 
J'ai créé une fonction  
 

Code :
  1. Common::Exists()


 
qui est sencé tester dans la BDD si un ID existe ou pas en fonction de la table de la classe courante.
Mais bon la n'est pas le probleme.
 
J'ai besoin de récupérer le nom de la classe  qui appelle la fonction Common::Exists().
 
Le truc c'est que si je fais ceci :

Code :
  1. Membre::Exists()


 
et que dans ma fonction Exists je fais un /
 

Code :
  1. echo get_class();


 
Il affiche "Common", hors je voudrais pouvoir connaitre quel classe a appeler cette fonction!
 
Si j'instancie un objet ca marche mais justemetn j'ai besoin de pouvoir utiliser cette fonction sans instancier un objet...
 
Y a-t-il une astuce que j'aurais zappé ? J'ai lu et relu la doc de PHP je ne trouve rien a ce sujet...
Maintenant si y a pas de solution... tant pis :(  
 
D'avance merci!  
 
Gat$


Message édité par Gat$ le 22-10-2008 à 11:04:20
mood
Publicité
Posté le 22-10-2008 à 11:00:53  profilanswer
 

n°1803080
flo850
moi je
Posté le 22-10-2008 à 11:03:54  profilanswer
 

ça me semble logique que  si tu instancie un objet de classe common, il se comporte comme un objet de classe common, et pas comme un d'une de ses classes filles
 
ceci dit, je ne comprends pas comment tu appelle Membre:Exists() dans un objet de type common ?

n°1803083
Gat$
http://www.wowteamfinder.com
Posté le 22-10-2008 à 11:06:42  profilanswer
 

flo850 a écrit :

ça me semble logique que  si tu instancie un objet de classe common, il se comporte comme un objet de classe common, et pas comme un d'une de ses classes filles
 
ceci dit, je ne comprends pas comment tu appelle Membre:Exists() dans un objet de type common ?


 
Je n'instancie rien justement!
 
- Membre hérite de Common.
- La fonction "Exists" est dans la classe Common, mais est appeler depusi la classe Membre : Membre::Exists();
 
Q. Comment connaitre ce qui est en gras souligné a l'interieur de la fonction Exists() sans devoir instancier un objet Membre en dehors ?
 
Voila simplement ma question :)


Message édité par Gat$ le 22-10-2008 à 11:07:19
n°1803084
flo850
moi je
Posté le 22-10-2008 à 11:09:11  profilanswer
 

je dois etre fatigué , mais Exist est une fonction statique ?

n°1803086
FlorentG
Posté le 22-10-2008 à 11:11:46  profilanswer
 

Ca n'est possible qu'à partir de PHP 5.3, avec l'implémentation du late static binding.

 

Si tu n'as pas la 5.3, il n'y a strictement aucun moyen, dans une méthode statique, de récupérer le nom de la classe enfant [:sadnoir] Ca a niqué bon nombre d'implémentations d'ActiveRecord.


Message édité par FlorentG le 22-10-2008 à 11:11:53
n°1803088
FlorentG
Posté le 22-10-2008 à 11:13:54  profilanswer
 

Le seul moyen serait d'avoir des méthodes Exists dans tes classes filles, qui appellerait explicitement une autre méthode dans Common, genre :
 

Code :
  1. class Common
  2. {
  3.  
  4.  public static function _Exists($type)
  5.  {
  6.     ...
  7.   }
  8.  
  9. }


et

Code :
  1. class Membre extends Common
  2. {
  3.  
  4.  public static function Exists()
  5.  {
  6.    return Common::_Exists('Membre');
  7.  }
  8.  
  9. }


Message édité par FlorentG le 22-10-2008 à 11:16:24
n°1803090
Gat$
http://www.wowteamfinder.com
Posté le 22-10-2008 à 11:14:01  profilanswer
 

flo850 a écrit :

je dois etre fatigué , mais Exist est une fonction statique ?


 
Non.
 

Code :
  1. class common {
  2.  public function Exists($id=NULL) {
  3.   // Table courante
  4.   $cur_table=get_class();
  5.   // utilisation de l'id de l'objet courant si $id est NULL et si l'objet existe
  6.   if(is_null($id))  {
  7.    if(is_object($this)) {
  8.     $id=$this->data[$cur_table]['id'];
  9.    }
  10.   }
  11.   // Check de l'existance dans la BDD  
  12.   $data=common::sql("
  13.    SELECT `" . $cur_table . "`.`id`
  14.    FROM `" . $cur_table . "`
  15.    WHERE `" . $cur_table . "`.`id` = '" . intval($id) . "'
  16.   " );
  17.   return ($data[0][$cur_table]['id'] > 0 ? true : false);
  18.  }
  19. }


 
 

Code :
  1. class membre extends common {
  2.  ...
  3. }


 
 
Et si je fais :  
 

Code :
  1. membre::Exists();


 
Aucun moyen de savoir avec quel classe je l'ai appelée, voila tout mon probleme.
Maitenant si ya pas de solution, dite le et je trouverai autre chose :)
 
En fait $cur_table prendra la valeur "common" et devrait dans mon cas contenir "membre"  
 
Merci pour tes reponses


Message édité par Gat$ le 22-10-2008 à 11:15:33
n°1803091
FlorentG
Posté le 22-10-2008 à 11:14:37  profilanswer
 

Comme dit, pas de solution, faut bricoler comme dans mon 2ème post

n°1803092
Gat$
http://www.wowteamfinder.com
Posté le 22-10-2008 à 11:15:52  profilanswer
 

Ok au moins je suis fixé, merci a toi ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Connaitre le nom d'une classe enfant (sans l'instancier)

 

Sujets relatifs
std::map associer des index et une classe, comparison functionutiliser dans une methode toString() celle d'une autre classe
Question classe session[VB .NET] Comment utiliser une classe écrite en C#
Comment connaitre la rareté d'une librairie ?mon programme ne trouve pas la classe
[EXCEL] Connaitre la position de la cellule couranteScript pour scanner un réseau et connaitre les hosts connecté
pb applet et classe javaUne requete mySQL qui ne classe pas les résultats
Plus de sujets relatifs à : Connaitre le nom d'une classe enfant (sans l'instancier)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR