Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/09/2006, 14h11   #1
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
Par défaut DEFINE et fonctions

Salut,

Voila comment se présente ma page:

Code :
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
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 14h44   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 :
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 15h49   #3
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
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é
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 16h04   #4
Rédacteur
 
Avatar de Yoshio
 
Homme
Inscription : septembre 2005
Messages : 1 741
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 1 741
Points : 1 497
Points : 1 497
A la place du echo met return

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

Code :
1
2
3
4
5
 
function xxx {
    $var = 'oki';
    return $var;
}
Je sais aps si ca peut fonctionner
Yoshio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 16h30   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
La solution proposée ne te convient-elle pas ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2006, 18h54   #6
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
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.
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h26.


 
 
 
 
Partenaires

Hébergement Web