Assignation dans une condition - Msg de Zend Studio

Eléphant du PHP | 168 Messages

12 mars 2008, 19:11

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

ViPHP
ViPHP | 928 Messages

12 mars 2008, 19:55

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ù.

Eléphant du PHP | 168 Messages

12 mars 2008, 21:50

Ah daccord, merci j'ignore donc le message et ne cherche pas l'erreur ou il y a n'a pas :)

Mammouth du PHP | 19672 Messages

13 mars 2008, 00:52

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 :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 168 Messages

13 mars 2008, 12:57

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é ?

Mammouth du PHP | 19672 Messages

13 mars 2008, 13:03

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().
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 168 Messages

13 mars 2008, 13:29

Merci à toi Cyrano, c'est un plaisir de te lire :)

Eléphant du PHP | 124 Messages

13 mars 2008, 14:44

Je te le fais pas dire.
C'est bien pour cela qu'il à composer un bouquin !
---

Mammouth du PHP | 19672 Messages

13 mars 2008, 14:45

Je te le fais pas dire.
C'est bien pour cela qu'il à composer un bouquin !
lol :D
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 168 Messages

13 mars 2008, 15:18

Il ne confond pas avec cyruss ?

ViPHP
ViPHP | 4674 Messages

13 mars 2008, 16:10

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 19672 Messages

13 mars 2008, 18:16

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" ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 168 Messages

13 mars 2008, 19:35

ahaha.. je cherchai trop compliqué ...