Fonction + renvoie d'erreur

Résolu
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 23 févr. 2007 à 15:13
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 - 23 févr. 2007 à 16:15
    Saluté ...
j'ai une question sur les fonctions... Comme j'ai appris une 'vrai' fonction est censée renvoyer un résultat true ou false de façon à pouvoir l'utiliser comme suit

if (mafonction() ){
    echo 'ça dit true';
} else {
    echo 'ça dit false';
}

bon ça je sais faire ...sauf que j'aimerai que ma fonction quand elle renvoie false renvoie aussi à côté une variable avec à l'intérieur un message d'erreur que je puisse afficher ...
c'est possible ça ?

merci
@+

6 réponses

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 févr. 2007 à 16:00
En fait, il faut mettre le & dans la définition de la fonction mais pas lors de l'appel...

Dans un passage par valeur (comme normalement) une copie de la valeur de la variable est donnée à la fonction ; quelque soit donc le comportement de la fonction, cela n'affecte pas la variable originale.

Avec un passage par référence, c'est l'adresse mémoire qui est transmise à la fonction... Les modifs se font donc sur la variable directement! :)

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
3
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 févr. 2007 à 15:17
Yop!
Si vraiment tu veux une fonction 100% bool:

$error = NULL;
function maFonction( &$error ) // passage de $error par référence
{
  // code php ici

  if( ... ) // si erreur
  {
    $error = 'erreur1';
    return false;
  }

  // encore du code

  if( ... ) // si erreur

  {

    $error = 'erreur2';

    return false;

  }

  return true;
}

Si ca renvoie false, l'erreur est dans $error...

Sinon, si tu n'as pas besoin d'une fonction à 100% bool, tu peux renvoyer true en cas de succès et un message d'erreur sinon...

@++

R@f

La boîte à bouts de codes
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
23 févr. 2007 à 15:37
    yess je vais essayer ...
ben le truc c'est que dans mon cas l'erreur ne doit pas forcément s'afficher au moment de l'exé de la fonction et en plus la fonction vas tester un tas de paramètres donc certains seront ok et d'autres non ... donc je dois générer une erreur personnalisée pour chaque paramètre testé ... il me faut donc un renvoi du message d'erreur à côté de la réponse bool ...

c'est le & dans la syntaxe qui permet ça ?
en fait dans function maFonction( &$error )
&$error n'est pas un paramètre qu'on envoie à la fonction mais une variable que la fonction vas me renvoyer en en plus de son return ?

ou bien c'est ma fonction qui vas remplir la variable $error mais qui est placée en dehors d'elle même ? (dans ce cas faut il obligatoirement la déclarer avant d'exécuter cette fonction ?)

merci pour tout
@++
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
23 févr. 2007 à 15:42
re
je viens de tester en  local mais j'ai un message d'erreur

Warning: Call-time pass-by-reference has been deprecated -
argument passed by value; If you would like to pass it by reference,
modify the declaration of [runtime function name](). If you would like
to enable call-time pass-by-reference, you can set
allow_call_time_pass_reference to true in your INI file. However,
future versions may not support this any longer.

c'est pas activé par défaut le passage par référence ?
bizare non
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
23 févr. 2007 à 15:46
    bon ben j'ai trouvé ça à ce sujet
http://www.developpez.net/forums/showthread.php?t=55023

apparament ça fait un moment que ça ne se fait plus comme méthode :(...
je pense que mon hébergeur ne me permettra pas de l'utiliser

comment puis je faire autrement ?
0
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
23 févr. 2007 à 16:15
    ok...ça peut être pratique effectivement !
je vais utiliser ça !
merci bcp !
@++
0
Rejoignez-nous