Problème de variable dans un If

Petit nouveau ! | 1 Messages

06 févr. 2009, 17:35

Bonjour à toutes et à tous,

Le nom de mon sujet n'est pas très explicite mais si je savais comment le nommer je n'aurais sans doute pas à vous poser la question. Bref... :shock:

J'ai une fonction qui me renvoie une chaîne de caractère. J'vais la montrer ça évitera des explications aussi incompréhensibles qu'inutiles :
function triRdPM_OSN($var) {
if ($var == 'all') return '\'1\'';
else if ($var == '') return '$projets->getAttribute(\'RdPM_OSN_id\') == \'\'';
else return '$projets->getAttribute(\'RdPM_OSN_id\') == \'' . "$var" . '\'';
}
Ce que je voudrais, c'est que le résultat de cette fonction soit exécuté dans un If afin que celui face son boulot et m'affiche ce que je veux. J'ai fait comme ça :
if (triRdPM_OSN($_GET['rdpm_osn'])) {
/* Bla bla bla */
}
Mais... Rien de ce que je veux ne s'affiche...

Quand je fais un p'tit echo de la fonction et que je renvoie tout ça dans le If ça marche sans problèmes. Je penses donc que le problème vient du fait que le If ne fait pas le test sur ce qui est renvoyé mais voit juste que la chaine n'est pas vide et donc exécute le code.

Vous sauriez comment résoudre ça ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 févr. 2009, 18:15

hmm... quelque soit le contenu de $var, ta fonction va retourner une chaine non vide. Du coup, si tu récupères ce résultat et que tu l'utilises comme test dans un if(), php va l'interpréter comme un booléen passé à TRUE et rentrer dans la structure... donc en gros, tu vas toujours rentrer dans le if().

Je suis pas certain d'avoir bien compris ce que tu voulais faire, mais à priori, ta fonction devrait retourner non pas des chaines, mais directement des booléens (true false) et euh... là t'as des guillemets tellement un peu n'importe où que je t'avoue avoir du mal à comprendre le test...

Est-ce que quelque chose dans ce goût là ne correspondrait pas mieux à ce que tu veux faire :
function triRdPM_OSN($var) { 
  global $projets; // déclaration de la variable global pour y avoir accès depuis la fonction, sans la passer en paramètre
   if ($var == 'all') 
      return TRUE; 
   else // retourne TRUE si les valeurs sont identiques FALSE sinon
      return ($projets->getAttribute('RdPM_OSN_id') == $var); 
}
Nota : pas besoin du esleif, en effet, si $var est vide, la comparaison à $var aura le même effet :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...