1

J'ai un truc que je n'arrive pas à comprendre. Soit le code suivant :for ($descriptif = 0 ; $descriptif < 5 ; $descriptif++, $nid++, $vid++) { echo "<p><strong>$nid : $vid : external NID : " . $linked_node_nid . "</strong></p>"; if (!$record[1 + $descriptif] || (strpos($record[1 + $descriptif], "xx") !== FALSE)){ $nid--; $vid--; echo '<p class="SQLMessage">C\'est vide</p>'; continue; } $language = ""; switch ($descriptif) { case 0: $language = "fr"; $nid--; $vid--; echo '<p class="SQLMessage">C\'est du Français</p>'; continue; case 1: $language = "en"; echo '<p class="SQLMessage">C\'est de l\'Anglais</p>'; break; case 2: $language = "de"; echo '<p class="SQLMessage">C\'est de l\'Allemand</p>'; break; case 3: $language = "it"; echo '<p class="SQLMessage">C\'est de l\'Italien</p>'; break; case 4: $language = "es"; echo '<p class="SQLMessage">C\'est de l\'Espagnol</p>'; break; } // endswitch // Suite du code } // endfor
Il semble que mon continue, quand $descriptif vaut 0, fasse comme un break, soit que plutôt que de passer à l'itération suivante du for, le code après le switch est effectué.
Si je me base sur cette page ou celle-ci (qui, même hors contexte, permet bien de comprendre que switch n'est pas une boucle), je ne devrais pas avoir ce comportement. Je vois ça sous PHP 5.2.11, et il ne semble pas avoir de bug annoncé pour ce genre de chose.

Qu'est-ce que j'ai de faux dans mon raisonnement ?

Merci
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

2

Apparament en PHP (contrairement au C et C++) le continue fonctionne aussi sur des structures qui ne sont pas de boucle, donc il fonctionne aussi sur un switch.

ça ne me parait pas être un choix de conception complètement aberrent : comme ça le continue et le break font effet sur la même structure de contrôle de flot.
Aucun de ces deux types de comportement (PHP ou C) me parait meilleur que l'autre

De toutes façons, quelque soit le langage et le choix qui a été fait pour traiter ce cas, j'éviterais vraiment d'utiliser un continue dans un cas qui peut être ambigu si on ne connait pas le choix (arbitraire ?) qui a été fait dans le standard du langage
avatar

3

Ah, donc mettre continue 2; serait plus juste.
Merci bien aze

(J'aurais juré que mon premier lien était pour du PHP grin)
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

4

oui, c'est bien dommage que tous les langages ne supportent ni break n; ni continue n; grin
avatar

5

aze (./2) :
Apparament en PHP (contrairement au C et C++) le continue fonctionne aussi sur des structures qui ne sont pas de boucle, donc il fonctionne aussi sur un switch.


Je ne metrais pas a ma main a couper que ce ne soit pas aussi le comportement du C, du moins que le "continue" dans ce cas force bien a refaire une boucle for.

Meme si pour le coup "continue" n'a pas vraiment de sens dans un switch (il suffit de ne rien mettre en C/C++)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

justement j'ai fait le test avant avec visual studio en c++ parce que je n'avais aucune idée du comportement que ça devait avoir : le continue passe bien à l'itération suivante du for.

sinon qu'est ce que tu dire par "il suffit de ne rien mettre en C/C++" ? le break est obligatoire en C/C++
et le continue aurait la même signification que le break s'il pouvait s'appliquer à un switch
avatar

7

aze (./4) :
oui, c'est bien dommage que tous les langages ne supportent ni break n; ni continue n; grin

Du moment que PHP supporte (je viens de lancer mon script), ça fait mon beurre.
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

8

de manière générale, ne jamais utiliser "continue" dans des boucles / scopes imbriquées à cause de la non lisibilité

et de manière générale, si possible, toujours éviter d'utiliser un continue. On peut s'en passer dans 99% des cas (dont ton exemple), et ca aide à la lisibilité

(désolé pour le up de 10 j)
Ancien pseudo : lolo

9

(t'as été séquestré 10 jours par Ximoon c'est pour ça ? cheeky)

10

(heu, non, why ? )
Ancien pseudo : lolo

11

(parce qu'il choppe une crise cardiaque dès que ses yeux effleurent le mot continue, donc je me demandais si t'avais pas vécu un lavage de cerveau ^^)

12

(lol ok)
Ancien pseudo : lolo

13

./8 : Tu me proposerais d'utiliser quoi à la place ?

Soucis de lisibilité, c'est pour ceux qui ne commentent pas leur code, ça embarrassed gni
avatar
Je sais qu'il y a marqué "con" sur ma gueule. Je suis né comme ça, je m'y fais. Mais pourquoi toutes les filles qui me plaisent se sentent obligées de rajouter le suffixe "-fident" ?

14

Pour remplacer continue par autre chose, personnellement, je ne vois que goto… (Malheureusement, je me suis rendu compte quand j'en ai eu besoin, que goto n'a été implémenté que tardivement dans PHP… Donc ça ne fonctionne pas forcément dans la version que tu utilises si ce n'est pas la toute dernière)
(Tu peux aussi t'en tirer avec des if else qui couvrent des dizaines de lignes, mais franchement c'est bien pire pour la lisibilité qu'un continue tongue)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

15

idem, ne pas utiliser de goto...

for ($descriptif = 0 ; $descriptif < 5 ; $descriptif++, $nid++, $vid++) { 
	echo "<p><strong>$nid : $vid : external NID : " . $linked_node_nid . "</strong></p>"; 
	if (!$record[1 + $descriptif] || (strpos($record[1 + $descriptif], "xx") !== FALSE)){ 
		$nid--; 
		$vid--; 
		echo '<p class="SQLMessage">C\'est vide</p>'; 
	} 
	else
	{
		$language = ""; 
		switch ($descriptif) { 
			case 0: 
				$language = "fr"; 
				$nid--; 
				$vid--; 
				echo '<p class="SQLMessage">C\'est du Français</p>'; 
				break;
			case 1: 
				$language = "en"; 
				echo '<p class="SQLMessage">C\'est de l\'Anglais</p>'; 
				break; 
			case 2: 
				$language = "de"; 
				echo '<p class="SQLMessage">C\'est de l\'Allemand</p>'; 
				break; 
			case 3: 
				$language = "it"; 
				echo '<p class="SQLMessage">C\'est de l\'Italien</p>'; 
				break; 
			case 4: 
				$language = "es"; 
				echo '<p class="SQLMessage">C\'est de l\'Espagnol</p>'; 
				break; 
		} // endswitch 

		if ($language!=='fr')
		{
			// Suite du code 

		}
	}
} // endfor


de plus, attention, il manque le default dans ton switch
Ancien pseudo : lolo

16

GoldenCrystal (./14) :
(Tu peux aussi t'en tirer avec des if else qui couvrent des dizaines de lignes, mais franchement c'est bien pire pour la lisibilité qu'un continue tongue.gif )

Je suis confronté à ça, les imbrications de if ça fait des assemblages très logiques, mais au bout de trois pages de code t'es un peu paumé...

17

ben apres, comme je le disais, le plus important, c'est dévité les continues dans les scopes imbriqués.

donc fais juste un "if ($language!=='fr') continue;" en dehors de ton switch, et ca sera déjà plus propre wink
Ancien pseudo : lolo