OVH Cloud OVH Cloud

Bug etrange sur "return"

6 réponses
Avatar
Thomas Harding
Bonjour,
J'ai un bug étrange sur return dans une fonction:

si je fais:
echo mafonction();

cela n'affiche rien si je fais un
return 0 ou return false (c'est normal),
cela affiche "1" si je fais
return "toto" ou return 2 (ou $this->serveroutput->status dans la vraie vie);

Ca fait bien 3 heures que je sèche...

Le fichier:

cvs -z3 \
-d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/phpprintipp \
co phpprintipp

fichier "PrintIPP.php", ligne 1000 (function getPrinterAttributes).


--
Thomas Harding

6 réponses

Avatar
Yves_Guyane
Bonjour,
J'ai un bug étrange sur return dans une fonction:

si je fais:
echo mafonction();

cela n'affiche rien si je fais un
return 0 ou return false (c'est normal),
cela affiche "1" si je fais
return "toto" ou return 2 (ou $this->serveroutput->status dans la vraie vie);

Ca fait bien 3 heures que je sèche...

Le fichier:

cvs -z3
-d:pserver::/sources/phpprintipp
co phpprintipp

fichier "PrintIPP.php", ligne 1000 (function getPrinterAttributes).





function test (){
return "toto";
}


echo test();

me renvoit : toto

tu n'as pas oublié les " ?

Avatar
Thomas Harding
function test (){
return "toto";
}


echo test();

me renvoit : toto

tu n'as pas oublié les " ?


Rassure-toi : non (j'ai le problème sur _une_ fonction, et je l'ai
triturée dans tous les sens en mettant justement return "toto", return
1; return 2; et j'en passe... :)

J'ai beau retourner le problème dans tous les sens, je ne comprends pas.

merci quand-même,
--
Thomas Harding

Avatar
Olivier Miakinen

tu n'as pas oublié les " ?


Rassure-toi : non (j'ai le problème sur _une_ fonction, et je l'ai
triturée dans tous les sens en mettant justement return "toto", return
1; return 2; et j'en passe... :)


Et si tu mettais à disposition le fichier autrement que via cvs, pour
que tout le monde puisse le lire ? Une façon simple consisterait à le
mettre sur un site web, sans suffixe pour qu'il ne soit pas interprété
par PHP. Une autre façon : <http://www.cjoint.com/>.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)


Avatar
Paul Delannoy
Thomas Harding a écrit:
function test (){
return "toto";
}
echo test();

me renvoie : toto

tu n'as pas oublié les " ?



Rassure-toi : non (j'ai le problème sur _une_ fonction, et je l'ai
triturée dans tous les sens en mettant justement return "toto", return
1; return 2; et j'en passe... :)

J'ai beau retourner le problème dans tous les sens, je ne comprends pas.


Je crois pouvoir dire : le type de données renvoyé par return est fixé
( "par qqchose" mai quoi ?) à "booléen".


Avatar
Thomas Harding
Le 06-01-2006, Olivier Miakinen <om+ a écrit :
[ fonction retournant true or false à la place d'une chîne de
caractères ]
Rassure-toi : non (j'ai le problème sur _une_ fonction, et je l'ai
triturée dans tous les sens en mettant justement return "toto", return
1; return 2; et j'en passe... :)


Et si tu mettais à disposition le fichier autrement que via cvs, pour
que tout le monde puisse le lire ? Une façon simple consisterait à le
mettre sur un site web, sans suffixe pour qu'il ne soit pas interprété
par PHP. Une autre façon : <http://www.cjoint.com/>.


Merci : Je n'avais pas pensé à çà !

[le site web est mis à jour par CVS, avec une crontab : ça devrait
être disponible le 6/01 vers 19 heures]

La fonction seule :
<URL:http://www.nongnu.org/phpprintipp/problems/getPrinterAttributes>

La classe complète :
<URL:http://www.nongnu.org/phpprintipp/phpprintipp/problems/PrintIPP>

L'archive complète (déjà dispo) :
<URL:http://download.savannah.nongnu.org/releases/phpprintipp/PrintIPP_0.6.tgz>

--
Thomas Harding


Avatar
Thomas Harding
[ fonction retournant true or false à la place d'une chîne de
caractères ]


J'ai trouvé !

J'avais complètement oublié que je surchargeais la fonction dans la
classe appelante, faisant un appel à parent::mafonction(), et retournant
false si elle était fausse ou continuant le traitement si elle était
vraie, avec un return true à la fin.

Je m'explique :

class toto {

function mafonction () {

if (truc())
return "toto";
else
return false;

}

};

class titi extends toto {

function mafonction () {

if (!parent::mafonction())
return false;

blabllabla;

return true;
}

};

La correction :

class titi extends toto {

function mafonction () {

if (!$result = parent::mafonction())
return false;

blabllabla pas vital de la fonction supplémentaire;

return $result;
}

};


Désolé de tout ce ramdam :(
--
Thomas Harding