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 :

[PHP 5.2] Appel dynamique de fonction statique


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut [PHP 5.2] Appel dynamique de fonction statique
    Bonjour,

    Je voudrai appeler une fonction publique statique de cette facon:
    La classe TEST est dans la variable $table.

    Donc en gros en PHP 5.3 ça donnerait
    Le problème est que le serveur est sur PHP 5.2.

    Donc j'ai essayé de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func( array( get_class( $table ), 'DATECREATION' ), '' )
    et j'ai le message d'erreur suivant:
    [Warning] call_user_func(Array) [<a href='function.call-user-func'>function.call-user-func</a>]: First argument is expected to be a valid callback
    Je n'arrive pas à régler ce problème.

    Merci de votre aide.

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Et en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func( array(  $table , 'DATECREATION' ), '' )
    Ce que j'ai pas bien comprit, est-ce que ta variable $table contient la chaine représentant le nom de la classe, ou elle contient une instance de ta classe ?
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    La chaine

    Et j'ai essayé ce que tu m'as dit mais ça fait la même erreur.

  4. #4
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    J'ai repris la doc de PHP, et lorsqu'on va voir comment définir un callback, on a ceci :

    callback

    Quelques fonctions comme call_user_func() ou usort() acceptent des fonctions de rappel définies par l'utilisateur comme paramètre. Les fonctions de rappel peuvent ne pas être de simples fonctions, mais aussi des méthodes d'objets, incluant des méthodes statiques.

    Une fonction PHP est passée par son nom, comme une chaîne. N'importe quelle fonction interne ou définie par l'utilisateur peut être passée, excepté les constructeurs de langage comme : array(), echo(), empty(), eval(), exit(), isset(), list(), print() ou unset().

    Une méthode d'un objet instancié est passée comme étant un tableau, contenant un objet à l'index 0 et le nom de la méthode à l'index 1.

    Les méthodes de classe statique peuvent également être passées sans instanciation de l'objet, en passant le nom de la classe au lieu de l'objet à l'index 0.
    En gras dans ton cas.
    Cela devrait être bon avec la syntaxe que je t'ai proposée.

    Sinon, même si d'après l'erreur cela n'a rien à voir. Enlève le 2eme paramètre dans la fonction call_user_func().
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Hello
    Merci de ton aide mais ça ne marchait pas quand même.

    Dans l'urgence de la situation, j'ai utilisé un bon gros switch de derrière les fagots.
    Mais bon si quelqu'un trouvé une solution, je suis quand même preneur ^^.
    Merci.

  6. #6
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Je viens de faire un petit test rapide sur mon PHP.

    Voila ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class maclasse {
     
            public static function fonc_stat()
            {
            echo "hello";
            echo "<br/>\r\n";
            }
    }
     
    maclasse::fonc_stat();
    $c = 'maclasse';
    //$c::fonc_stat(); // fonctionne pas car version de PHP 5.2
    call_user_func(array($c,'fonc_stat'));
    Et le code est fonctionnel.
    Si ça peut t'aider.
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2007
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Ouais cet exemple fonctionne aussi chez moi.

    Je me demande si ce n'est pas le framework prado qui n'aimait pas trop.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Si tu accèdes à quelque chose de cette manière :
    TRUC n'est pas une méthode de la classe, mais une constante de cette classe.
    Sinon tu devrais y accéder comme ceci :
    Ceci expliquerait pourquoi tu ne peux pas utiliser call_user_func()
    Pourfendeur de singletons en croisade

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    Ce que tu cherchais à faire à l'origine n'est possible que depuis PHP 5.3 il me semble.

    Tu peux plus simplement utiliser la classe ReflectionClass qui plus est très performante, dommage qu'elle soit si peu documentée :

    http://www.php.net/manual/fr/class.reflectionclass.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $myTest = new ReflectionClass('Test'); 
    $myConst = $myTest->getConstant('MYCONST');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Test {
        const MYCONST = '12/01/2010';
    }

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

Discussions similaires

  1. [JavaScript] [FAQ] Appeler dynamiquement une fonction et passer une fonction en argument
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/05/2008, 14h48
  2. Appeler dynamiquement une fonction javascript
    Par BigDozer dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/05/2008, 14h41
  3. Réponses: 13
    Dernier message: 17/01/2007, 13h18
  4. [Framework] Appel dynamique de fonctions
    Par hdd dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 21/12/2006, 17h35
  5. Appel dynamique de fonctions
    Par smyley dans le forum MFC
    Réponses: 4
    Dernier message: 27/10/2005, 12h53

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