Utiliser des opérateurs logiques dans un switch

Ygnobl
Invité n'ayant pas de compte PHPfrance

11 août 2005, 22:35

Bonjour, je voudrais utiliser une variable pour représenter un champ de bits, et la tester avec un switch. Pour commencer, j'ai testé avec ce petit code:
<?php

$i=$_GET['i'];
switch ($i){
        case && 1:
         echo '1 ';
        case && 2:
         echo '2 ';
        case && 4:
         echo '4 ';
        case && 8:
         echo '8 ';
        case && 16:
         echo '16 ';
        case && 32:
         echo '32 ';
        case && 64:
         echo '64 ';
        case && 128:
         echo '128';
}


?>
s'il était possible d'utiliser des opérateurs booléens dans un switch.
Au vu du message d'erreur que m'a retourné PHP 4.4, j'en ai déduit que non. Comment puis-je faire de manière plus élégante qu'en alignant des if ($i && $valeur) ?

Mammouth du PHP | 19672 Messages

11 août 2005, 22:43

C'est quoi les "&&" ?
Après "case", PHP attend une valeur. Ensuite si tu ne mets pas de break après les instructions d'un case, les autres seront également testés inutilement.
<?php
$i=$_GET['i'];
switch ($i){
    case 1:
         echo '1 ';
    break;
    case 2:
         echo '2 ';
    break;
    case 4:
         echo '4 ';
    break;
    case 8:
         echo '8 ';
    break;
    case 16:
         echo '16 ';
    break;
    case 32:
         echo '32 ';
    break;
    case 64:
         echo '64 ';
    break;
    case 128:
         echo '128';
    break;
}
?>
Ceci dit, un truc doit m'échapper parce que ce code, il y aurait une manière radicale de le simplifier :
echo(isset($_GET['i']) ? $_GET['i'] : "Aucune valeur reçue");
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 543 Messages

11 août 2005, 22:43

tu peux pas faire avec
<?php

$i=$_GET['i'];
switch ($i){
        case'1':
         echo '1 ';
        case'2':
         echo '2 '; 
:?: