IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Écriture de constante de classe dynamique [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 207
    Points
    207
    Par défaut Écriture de constante de classe dynamique
    Bonjour,

    J'utilise l'ORM propel et j'ai souvant besoin d'écrire ce genre de syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet->add(classStatic::CONSTANTE, $valeur);
    Pour rendre mon code plus générique, j'ai remplacer classStatic et CONSTANTE par des variables et je fais un eval du tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval('$objet->add('.$varClass.'::'.$varConstante.', $valeur);');
    Cela fonctionne très bien mais j'ai besoin d'augmenter les perfs du code et j'aimerai utilisé la fonction call_user_func() à la place de l'eval().
    Mon problème est que la syntaxe suivante me génére une erreure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func(array($objet, 'add'), $varClass.'::'.$varConstante, $valeur);
    Je suis donc à la recherche d'une écriture qui serait accepter par PHP.
    Merci de votre aide.

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    es-tu sûr de la nécessité de l'eval ?
    Ce code ne fonctionnerait-il pas :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet->add($varClass::$varConstante, $valeur);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 207
    Points
    207
    Par défaut
    bonjour,

    Merci pour la réponse mais cette écriture génère une fatal error très explicite

    Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /home/dev/apps/protov1/lib/clsQueryBd.class.php on line 117

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    aaarrrggghhh !

    Et ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet->add({$varClass}::{$varConstante}, $valeur);
    Le but étant de forcer l'interpolation.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 207
    Points
    207
    Par défaut
    Je ne connaissais pas l'écriture avec des accolades mais malheureusement pas mieux:

    Parse error: syntax error, unexpected '{', expecting ')' in /home/dev/apps/protov1/lib/clsQueryBd.class.php on line 110

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Dernière chance de tenter l'interpolation, après je serais sec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet->add(${varClass}::${varConstante}, $valeur);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Le plus simple est d'utiliser constant()

    http://fr2.php.net/manual/fr/function.constant.php

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Dernière chance de tenter l'interpolation, après je serais sec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet->add(${varClass}::${varConstante}, $valeur);
    Toujours pas, encore une fatal error. snif!

  9. #9
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par Xunil Voir le message
    Le plus simple est d'utiliser constant()

    http://fr2.php.net/manual/fr/function.constant.php
    Merci ça marche super bien, je ne connaissais pas cette fonction.

    Entre temps j'avais trouvé cette écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func(array($oCritere, 'add'), array($varClass, $vaConstante), $pnId);
    Mais les performances était lamentable, 59 secondes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/03/2015, 11h12
  2. [débutant]Définir constante dans classe
    Par Clark dans le forum C++
    Réponses: 11
    Dernier message: 11/05/2006, 17h43
  3. Structure de classe dynamique
    Par amel666 dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2006, 09h13
  4. constante de class
    Par jeff_! dans le forum Langage
    Réponses: 6
    Dernier message: 27/12/2005, 14h16
  5. [C#] Invoquer une class dynamiquement
    Par nicoo dans le forum C#
    Réponses: 4
    Dernier message: 09/11/2005, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo