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 :

DEFINE et fonctions


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut DEFINE et fonctions
    Salut,

    Voila comment se présente ma page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DEFINE("STEP", calcul_progress());
     
    function calcul_progress() {
       echo "ok";
    }
    Quand j'appelle une fois STEP, j'ai le ok qui s'affiche. Quand je le mets dans une boucle, il ne réaffiche pas ok. Par contre quand je mets directement dans la boucle calcul_progress(), là ça fonctionne.
    Je n'ai rien trouvé qui expliquerait ça.

    Y a il un moyen pour réexecuter la constante (et non la fonction)?

    Edit Mm j'ai aussi remarqué que quand je fais mon DEFINE(), celui-ci s'execute aussitôt. Donc si je fais DEFINE("TEST", "ok"); il s'affiche ok, même si je n'ai pas écrit TEST. Comment gérer ça ?

    Merci à tous

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu confonds le define() de PHP, qui définit des constantes, avec le #define du C, qui définit des macros.
    La différence est qu'en C tu peux définir des blocs de code et les exécuter à l'aide de ta macro, tandis qu'en PHP c'est simplement pour définir un nom de variable dont la valeur ne changera pas (= une constante).

    Si tu souhaites mettre le nom d'une fonction dans une constante, je pense qu'il te faut plutôt faire ainsi (mais je n'en vois pas trop l'intérêt) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    define('STEP', 'calcul_progress');
    function calcul_progress() {
       echo "ok";
    }
     
    for($i = 0; $i < 10; ++$i)
    {
        call_user_func(STEP);
    }
     
    ?>

    [Edit] Ce qu'il se passe dans ton code est que ta fonction est appelée dans le define et c'est le retour qui est affecté à STEP. Donc le "ok" est affiché dans la ligne de define et non dans la boucle, tandis qu'une chaîne vide (le retour de ta fonction) est affiché dans la boucle.

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci de ta réponse ça m'éclaire.
    Je m'explique pourquoi je tiens à garder cette syntaxe: dans mon script l'utilisateur est censé mettre des marques dans une page (où il veut).
    Je veux bien qu'il mette simplement calcul_progress() (ou step()), mais je trouve ça plus... "beau" de mettre STEP
    S'il n'y a pas de solution tant pis j'aurai essayé

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    A la place du echo met return

    Ou enregistre la chaine dans une variable et fait un return de cette chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function xxx {
        $var = 'oki';
        return $var;
    }
    Je sais aps si ca peut fonctionner

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    La solution proposée ne te convient-elle pas ?

  6. #6
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Tu parles du call_user_func(STEP); ?
    Ca ça fonctionnait mais finalement j'ai opté pour des fonctions bêtes et machantes (STEP()).

    Merci à vous.

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

Discussions similaires

  1. define en fonction des bibliothèques utilisées
    Par robinsondesbois dans le forum Débuter
    Réponses: 11
    Dernier message: 23/04/2014, 14h38
  2. Existe-t-il une fonction if not define
    Par phoque.r dans le forum Langage
    Réponses: 2
    Dernier message: 12/04/2007, 15h02
  3. define et fonctions
    Par arno. dans le forum C
    Réponses: 2
    Dernier message: 21/09/2006, 17h50
  4. Réponses: 17
    Dernier message: 24/07/2006, 18h23
  5. USER DEFINE FONCTION : PB éxécution requête
    Par juelo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/01/2004, 12h12

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