Page 1 sur 1

Assignation dans une condition - Msg de Zend Studio

Posté : 12 mars 2008, 19:11
par Nico
Bonjour,

Je teste la demo de zend studio, et n'ayant jamais utilisé de debugger, c'est pas évident a prendre en main au début.

Enfin bon après quelques tests, je pense avoir compris le principe, par contre une erreur me vient souvent :

Code : Tout sélectionner

Assignation dans une condition (ligne x)
A cette même ligne j'ai

Code : Tout sélectionner

while($aff_news = mysql_fetch_object($res_news))
Donc a mes yeux rien de plus normal ..

Ayant toujours appris comme ça, est ce un "raccourci" de langage de l'assigner dans le while ?

Merci

Posté : 12 mars 2008, 19:55
par Genova
Tu as bien sur le droit de faire ça (tout le monde le fait), mais il peut arriver de temps en temps qu'on écrive :
if ($var = 13)
au lieu de
if ($var == 13)
ce qui est souvent une grosse source d'ennui puisque le script marche mais pas avec le comportement attendu, et quand on parcours le code c'est pas toujours facile de voir que ça vient d'un = au lieu d'un ==, donc à mon avis le débogueur prévoie cette éventualité et te le signale pour le cas où.

Posté : 12 mars 2008, 21:50
par Nico
Ah daccord, merci j'ignore donc le message et ne cherche pas l'erreur ou il y a n'a pas :)

Posté : 13 mars 2008, 00:52
par Cyrano
C'est pas tout à fait ça. Si on programme de façon stricte, on ne devrait utiliser que des opérateurs de comparaison dans une structure de contrôle. Donc on devrait écrire :
while(false != ($aff_news = mysql_fetch_object($res_news)))
Et là le message disparaîtra dans ZDE :)

Posté : 13 mars 2008, 12:57
par Nico
Chouette j'aprends des choses !

Par contre désolé de mon ignorance, mais techniquement en gros ca dit :

Si le tableau $aff_news est différent de faux, alors ... ?

Si c'est bien ça, juste pour ma curiosité, admettons que il y ai une erreur dans la ressource sql, ca va générer du texte (l'erreur) ou un FALSE et ERREUR affiché ?

Posté : 13 mars 2008, 13:03
par Cyrano
Pour faire simple, la fonction mysql_XYZ() va boucler en alimentant un tableau tant qu'il y a des lignes à retourner : dès qu'il n'y en aura plus, ça va retourner FALSE et là on sortira proprement du while().

Si la ressource a retourné une erreur, il serait préférable de l'avoir interceptée avant la boucle, donc lors de l'exécution de la requête.
Valeurs de retour

Pour les requêtes du type SELECT, SHOW, DESCRIBE, EXPLAIN et les autres requêtes retournant un jeu de résultats, mysql_query() retournera une ressource en cas de succès, ou FALSE en cas d'erreur.
...
Tu peux parfaitement intercepter l'erreur en récupérant un FALSE qui serait retourné et dans ce cas, tu n'exécutes pas la boucle while().

Posté : 13 mars 2008, 13:29
par Nico
Merci à toi Cyrano, c'est un plaisir de te lire :)

Posté : 13 mars 2008, 14:44
par icebreak
Je te le fais pas dire.
C'est bien pour cela qu'il à composer un bouquin !

Posté : 13 mars 2008, 14:45
par Cyrano
Je te le fais pas dire.
C'est bien pour cela qu'il à composer un bouquin !
lol :D

Posté : 13 mars 2008, 15:18
par Nico
Il ne confond pas avec cyruss ?

Posté : 13 mars 2008, 16:10
par Hywan
Cyrano est bien plus qu'un simple membre :).

Sinon, une légère amélioration du script de Cyrano :
while(false !== ($aff_news = mysql_fetch_object($res_news)))
On préfère utiliser des comparaisons de valeur et de type pour des booléens (=== ou !==), ça évitera les sources d'erreurs du à la gestion des types par PHP.

Posté : 13 mars 2008, 18:16
par Cyrano
Il ne confond pas avec cyruss ?
Je crois qu'il fait plutôt référence à la pièce d'Edmond Rostand "Cyrano de Bergerac" ;)

Posté : 13 mars 2008, 19:35
par Nico
ahaha.. je cherchai trop compliqué ...