Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : constante de classe à récupérer dans la classe parente [ POO / Classes & Objets ] (rekam)

dimanche 27 janvier 2008 à 19:42:28 | constante de classe à récupérer dans la classe parente

rekam

Bonjour!

oui, je sais, le titre fait 3km de long, mais j'ai de la peine à le raccourcir...

Ainsi donc, voici mon problème:
1) J'ai 2 classe A et B
2) La classe B étend la classe A
3) La classe A définit une méthode statique A::chose()
4) La classe B définit une constante ou une propriété statique B::$test
5) je voudrais afficher la constante ou propriété statique définie dans B dans la méthode de A

Et évidemment, j'y arrive pas. En définissant "const test = 'truc';" ou "public static $test = 'truc';", j'obtiens un "not defined" dans la méthode de A.

Le code est celui-ci (copiez-collez, vous verrez bien)

class A {
    public static $test = 'truc A';
    public static function chose () {
        echo "voila : ".self::$test;
    }
}
class B extends A {
    public static $test = 'truc B';
}
B::chose();


Là, il me crache la valeur de $test définie dans A. Donc, bêtement, je commente la déclaration dans A, et là, pouf, "undefined static var...." qu'il me dit, le mécréant!

Alors bon, je tente le coup avec un petit "const test = 'truc B'" en lieu et place de la variable statique, mais non... même problème. Est-ce qu'il y a moyen de faire fonctionner ce binz? Est-ce que ce cas de figure est totalement débile? Je n'ai pas l'impression, pourtant. Je souhaite simplement pouvoir savoir, dans A, que l'appel à la méthode statique vient de B...

Bref si qqun m'a compris, je lui dis "bravo!".

Et si en plus, ce qqun a une solution, alors là, c'est champion du monde.

Bien la bonne soirée!
rekam


dimanche 27 janvier 2008 à 20:53:46 | Re : constante de classe à récupérer dans la classe parente

morpheus57

Hello,

Tout d'abord, attention à ne pas confondre constante de classe et propriété :

Tu peux définir une constante de classe de la manière suivante
class A{
    const CONST = "test";
}

Ensuite, en ce qui concerne ton problème, tu dois surcharger la méthode "chose" dans la classe B...
En fait le problème vient du fait que le mot clé "self" fait référence à la classe courante.... Donc dans ton exemple il fait toujours référence à la classe A

Voilà, avoir été clair ;-)
Bye




dimanche 27 janvier 2008 à 21:18:37 | Re : constante de classe à récupérer dans la classe parente

rekam

merci bien!

je m'en doutais et en fait... c'est triste. Parce qu'en fait, j'essaie précisément d'éviter de surcharger les fonctions. D'autant que la méthode A::chose() va contenir une sacrée quantité de choses, justement.

Donc bon, à moins d'avoir une de ces superbes constantes magiques PHPesque (telle __METHOD__ ), je ne vois pas trop comment faire... D'ailleurs, je viens d'essayer avec "method_exists", mais forcément, ça marche pas non plus, puisqu'il faut faire appel à self...

Snif... donc à moins de tout redéfinir la méthode, c'est pas possible, si j'ai bien compris?

merci
rekam


dimanche 27 janvier 2008 à 21:18:38 | Re : constante de classe à récupérer dans la classe parente

rekam

merci bien!

je m'en doutais et en fait... c'est triste. Parce qu'en fait, j'essaie précisément d'éviter de surcharger les fonctions. D'autant que la méthode A::chose() va contenir une sacrée quantité de choses, justement.

Donc bon, à moins d'avoir une de ces superbes constantes magiques PHPesque (telle __METHOD__ ), je ne vois pas trop comment faire... D'ailleurs, je viens d'essayer avec "method_exists", mais forcément, ça marche pas non plus, puisqu'il faut faire appel à self...

Snif... donc à moins de tout redéfinir la méthode, c'est pas possible, si j'ai bien compris?

merci
rekam


dimanche 27 janvier 2008 à 22:43:35 | Re : constante de classe à récupérer dans la classe parente

malalam

Administrateur CodeS-SourceS
Réponse acceptée !
Hello,

http://www.php.net/manual/en/language.oop5.late-static-bindings.php


dimanche 27 janvier 2008 à 23:36:58 | Re : constante de classe à récupérer dans la classe parente

rekam

alors là, chapeau, c'est pile poil ce qu'il faut!

je dois juste recompiler mon php linux pour matcher la version 5.3.0, sinon ça va pas marcher (d'ailleurs ça ne marche pas, visiblement, puisqu'un copier-coller me fait une parse error ;) .. j'ai php 5.2.3, donc forcément).

bref, merci. En tous les cas, malalam, tes posts sur les forums sont tout autant pertinents que tes sources et tutoriaux!

a+
rekam

lundi 28 janvier 2008 à 08:25:19 | Re : constante de classe à récupérer dans la classe parente

malalam

Administrateur CodeS-SourceS
:-)
Merci rekam!
En fait, ta question tombait pile poil : c'est un comportement de php qui m'emm*** depuis longtemps. Et je suis tombé sur cette nouvelle fonctionnalitée OO il y a peu.
Et j'insiste au passage sur la necessité d'au moins consulter la doc version anglaise régulièrement parce que la version française a toujours beaucoup de retard dessus.


lundi 28 janvier 2008 à 13:55:34 | Re : constante de classe à récupérer dans la classe parente

morpheus57

Ah ben merci malalam : c'est vrai que c'était un comportement de PHP qui n'était pas terrible






Cette discussion est classé dans : test, static, truc, classe, statique


Répondre à ce message

Sujets en rapport avec ce message

Return pour une Classe [ par mandark ] Bonjour à tous et encore merci à tous de l'aide que vous offrez ici (:Voilà j'aimerai savoir comment gérer les valeurs de retour d'une classe, je m'ex POO php5 classe abstraite et méthode static [ par dorian91 ] Bonjour à tous,J'ai une petite question pour vous. Je vais vous écrire le code et vous expliquer mon problèmeclass Test1 extends Test2{}abstract class Variable static [ par VANGELIS02 ] Bonjour à tous,Alors voila j'ai un petit problème de variable static.Exemple : class Test{  private static $test;    public static function getVariabl bug fopen sous windows ? [ par pewpew2001 ] Bonjour, j'ai un problème assez génant de latence lors de l'utilisation de fopen, j'ai d'ailleur le meme problème avec curl, ou même file_get_contents Test d'égalité non satisfait avec if [ par masseur ] Bonjour.Je fais cette requête.SELECT nom,adresse1,adresse2,cp,localite FROM util WHERE id = '$ID'On va parler uniquement du cas qui m'embette.Imaginon contrôle [ par Rotsycs ] salut, j'ai créée un site web pour la gestion des courriers administratifs et lors de son test, il y a des erreurs survenus lors de son test.L'erreur Mot clé static [ par slurp ] qui pourrais m'expliquer le mot clé static, pasque moi je serais tenter de l'utiliser partout vu que pas besoin d'instancié la class.S'il vous plait u Aide sur API Google nxgooglemapsapi.php [ par koestel ] Bonjour,J'utilise la classe ''nxgooglemapsapi.php" pour mieux gèrer l'api google pour une applicationcela fonctionne mais j'aimerai pouvoir :Rajouter Tirer un nombre au hazard [ par lolosav ] Bonjouret bonne fêtes à tous !je vous expose mon probléme ! je suis en train de créer un jeu-question ! je vais entrer dans un tableaux un nombre export CSV particulier URGENT HELP!!! [ par ronanT95 ] Bonjour à tousje requiert votre aide pour un souci sur lequel j'ai buté toute la journée. voilà, pour ma boite, j'ai créé une interface qui me permet


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,045 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.