Plus court ?

Par Frank Hélin, il y a 10 ans


Bonjour,
Peut-on faire plus court ?

    switch ($_GET['pof']) :
    case $_GET['pof'] = flambys :
    $title_page = $menu[flambys][title];
    $adresse = $infos[flambys][description];
    $key = $infos[flambys][keywords];
    break;
    case $_GET['pof'] = poivre :
    $title_page = $menu[poivre][title];
    $adresse = $infos[poivre][description];
    $key = $infos[poivre][keywords];
    break;
    case $_GET['pof'] = rose :
    $title_page = $menu[rose][title];
    $adresse = $infos[rose][description];
    $key = $infos[rose][keywords];
    break;
    case $_GET['pof'] = espoir :
    $title_page = $menu[espoir][title];
    $adresse = $infos[espoir][description];
    $key = $infos[espoir][keywords];
    break;

    case $_GET['pof'] = oeuf :
    $title_page = $menu[oeuf][title];
    $adresse = $infos[oeuf][description];
    $key = $infos[oeuf][keywords];
    break;

endswitch;

Merci.

10 réponses

Naïr, il y a 10 ans

Salut, effectivement on peut faire plus "court" :

$title_page = $menu[$_GET['pof']][title];
$adresse = $infos[$_GET['pof']][description];
$key = $infos[$_GET['pof']][keywords];

Lartak, il y a 10 ans

Bonjour.
@Frank Hélin : Tu n'utilises pas correctement le switch, c'est par exemple :

switch ($_GET['pof']): case 'flambys': /* et non : */ case $_GET['pof'] = flambys : /* code ... */ break; case 'poivre': /* code ... */ break; /* etc ... */ endswitch;

Sinon, la proposition de Naïr est plutôt correcte, bien que comme toi, il oubli des apostrophes/quotes.
@Naïr: Tu aurais pu mettre le code dans la balise adéquate.

<?php $getValPof = $_GET['pof']; $title_page = $menu[$getValPof]['title']; $adresse = $infos[$getValPof]['description']; $keywords = $infos[$getValPof]['keywords'];

Par contre, je te conseille de faire un nettoyage et une vérification de la valeur du paramètre passée en get dans l'url, car il ne faut pas oublier, que les valeurs des paramètres passées dans l'url, sont facilement modifiables et peuvent causer des erreurs lorsque c'est le cas.

Frank Hélin, il y a 10 ans

En effet je n'utilisais pas switch correctement, merci à vous. Toutefois, quelles peuvent être les conséquences d'un mauvais usage de switch.
Je demande cela par curiosité étant donné que ma façon de l'utiliser fonctionnait.

Frank Hélin, il y a 10 ans

Sinon, n'y a t-il pas une façon beacoup plus courte d'obtenir le même résultat ? Je rêve d'une seule ligne. Est-ce utopique ?

Lartak, il y a 10 ans

quelles peuvent être les conséquences d'un mauvais usage de switch.

C'est en premier lieu que tu fais de la répétition de code, par exemple en répétant la variable $_GET['pof'].
Ensuite, quel est l'intérêt d'utiliser une fonctionnalité de PHP, si c'est pour alourdir ton code au niveau du nombre de caractères ?
Le principal intérêt de switch est qu'en lui attribuant une variable, de pouvoir tester l'égalité des valeurs définies par la suite et de faire des actions différentes selon celles-ci, et ce, en un minimum de code.
Sinon, autant utiliser des if -> else ou des if -> elseif si c'est pour faire comme tu l'utilises.

Khalysto, il y a 10 ans

Une fois de plus, @Lartak est dans le vrai, on ne peut pas mieux expliquer, GG :)

Frank Hélin, il y a 10 ans

Grâce à vous j'ai trouvé la formule idéale :
(j'économise plus de 20 lignes !)

switch ($_GET['pof']): case $_GET['pof']: $getValidc = $_GET['pof']; $title_page = $menu[$getValpof]['title']; $adresse = $infos[$getValpof]['description']; $keywords = $infos[$getValpof]['keywords']; break; endswitch;
PhiSyX, il y a 10 ans

En gros si tu fais un if, ça revient au même là…, t'économises 3 lignes.

Ramzz1994, il y a 10 ans

Pourquoi une switch dans ce cas ?

$getValidc = $_GET['pof']; $title_page = $menu[$getValpof]['title']; $adresse = $infos[$getValpof]['description']; $keywords = $infos[$getValpof]['keywords'];

Ça te suffit pas ? Tes tableaux associatifs ($menu et $infos) te permettent d'éviter d'utiliser les structures de contrôle tel que la switch ! (dans ton cas) C'est absolument inutile d'avoir une switch avec une seule condition de sortie.

Frank Hélin, il y a 10 ans

Maintenant que j'ai raccourcis mon code, oui en effet. Merci.