Discussion:
case $toto = "titi"
(trop ancien pour répondre)
Mihamina Rakotomandimby (R12y)
2007-06-26 14:24:59 UTC
Permalink
Bonjour,

J'ai un système avec une syntaxe the switch/case assez "vieille":

switch($toto)
{
case $toto = "titi":
// blablabla
case $toto = "tata":
// bliblibli
}

alors que dans la doc PHP, ça serait plutot

switch($toto)
{
case "titi":
// blablabla
case "tata":
// bliblibli
}

La première syntaxe passe sur un PHP 4.3.
Mais sur un 5.2 par défaut de chez Debian, ça ne passe plus, il faut passer
à la deuxième syntaxe.

Comme je sais que de temps en temps, il y a des options de
retro-compatibilité qui sont permises, sauriez-vous si il y en a une qui
ferait qu'on puisse passer ce système en 5.2 tout en remettant la
réécriture du code à légèrement plus tard?

En gros, le système sur lequel je travaille actuellement est un ensemble de
fichiers PHP de quelques milliers de lignes et une trentaine de "case"
chacun. Il faut le réécrire, je sais. Mais il faut d'autres choses aussi.

Merci.
--
"Beaucoup de gens achètent des choses dont ils n'ont pas besoin
avec de l'argent qu'il n'ont pas (crédits & emprunts)
pour impressionner des gens qu'ils n'aiment pas."
Inconnu
Olivier Miakinen
2007-06-26 14:57:57 UTC
Permalink
Post by Mihamina Rakotomandimby (R12y)
switch($toto)
{
// blablabla
// bliblibli
}
Hein ??? Ça a existé, ça ?!? C'est vieux ou c'est juste un bug ?

Même dans la doc de PHP/FI 2.0 il n'y a pas cette syntaxe :
http://www.php.net/manual/phpfi2.php#switch
Post by Mihamina Rakotomandimby (R12y)
alors que dans la doc PHP, ça serait plutot
switch($toto)
{
// blablabla
// bliblibli
}
Ben oui. Et en Java, en C++ ou en C on a exactement la même chose (si ce
n'est que les valeurs ne peuvent pas être des chaînes de caractères).
Post by Mihamina Rakotomandimby (R12y)
La première syntaxe passe sur un PHP 4.3.
Tu es sûr de ça ?

Essaye le code suivant :

$toto = "GABUZOMEU";
switch($toto)
{
case $toto = "titi":
// blablabla
case $toto = "tata":
// bliblibli
}
echo $toto;

Est-ce que ça affiche bien GABUZOMEU, ou alors plutôt titi ou tata ?
Post by Mihamina Rakotomandimby (R12y)
Comme je sais que de temps en temps, il y a des options de
retro-compatibilité qui sont permises, sauriez-vous si il y en a une qui
ferait qu'on puisse passer ce système en 5.2 tout en remettant la
réécriture du code à légèrement plus tard?
Il faudrait déjà savoir avec quelle version c'est censé être rétro-
compatible, si cela a jamais existé. Personnellement je doute.
Post by Mihamina Rakotomandimby (R12y)
En gros, le système sur lequel je travaille actuellement est un ensemble de
fichiers PHP de quelques milliers de lignes et une trentaine de "case"
chacun. Il faut le réécrire, je sais. Mais il faut d'autres choses aussi.
Peut-être un truc comme ce qui suit ?
s/\(^[ ^I]*case[ ^I][ ^I]*\$[^=]*\)=[^:]*:/\1:/
(les ^I sont des tabulations)
Olivier Miakinen
2007-06-26 15:37:52 UTC
Permalink
Post by Olivier Miakinen
Peut-être un truc comme ce qui suit ?
s/\(^[ ^I]*case[ ^I][ ^I]*\$[^=]*\)=[^:]*:/\1:/
(les ^I sont des tabulations)
Je me suis planté dans mon expression, mais je t'ai aussi répondu dans
fr.comp.os.unix.
slambert
2007-06-26 15:37:52 UTC
Permalink
à transformer en
Ca sent pas l'expression régulière a plein nez, ca ?

Une ligne commencant par "case" avec "$machin =" dedans , remplacer le
"$machin =" par rien, quelque soit "machin".

Stef
Gromitt
2007-06-26 15:37:52 UTC
Permalink
Post by Mihamina Rakotomandimby (R12y)
Bonjour,
Aloha,
Post by Mihamina Rakotomandimby (R12y)
switch($toto)
{
// blablabla
// bliblibli
}
La "bonne" "vieille" syntaxe serait sans doute plutot celle-ci :

switch (TRUE)
{
case ($toto === "titi"):
// blablabla
case ($toto === "tata"):
// bliblibli
}

Mais dans ce cas-ci, l'utilisation "normale" du switch est a
recommander inconditionnellement :

switch ((string) $toto) // le typage est important si tu ne
// veux pas qu'un scalaire
// (0 par exemple) puisse satisfaire
// le premier "case" de type string.
{
case "titi":
// ...
case "tata":
// ...
}

La "vieille" syntaxe est a utiliser dans des cas tres particuliers (et
encore... autant mettre des if...else).
Michel Billaud
2007-07-01 20:40:40 UTC
Permalink
Post by Mihamina Rakotomandimby (R12y)
Bonjour,
switch($toto)
{
// blablabla
// bliblibli
}
un coup de sed, ou de perl, pour nettoyer le terrain, genre

perl -pi -e /case .*=/case / *.php

?

MB
--
Michel BILLAUD ***@labri.fr
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)
Continuer la lecture sur narkive:
Loading...