2009-08-16 9 views
1

Existe-t-il un meilleur moyen d'écrire ce qui suit, sinon d'utiliser un commutateur ou une instruction if/else? Comme est-ce une situation où une variable varaiable de PHP ($$ var) pourrait venir à utiliser? Si oui, comment écrireiez-vous ce code?Comment feriez-vous ce code php?

$type = 2; 

switch ($type) { 
case 1: 
    $type = 'gif'; 
    break; 
case 2: 
    $type = 'jpg'; 
    break; 
case 3: 
    $type = 'png'; 
    break; 
default: 
    $type = 'jpg'; 
    break; 
} 

Répondre

7
$types = array(1 => 'gif', 2 => 'jpg', 3 => 'png', 4 => 'jpg'); 

...

array_key_exists($type, $types) ? $types[$type] : 'jpg'; 
+0

super même que ci-dessus mais en version courte! – JasonDavis

+0

Les éléments du tableau sont séparés par des virgules et non par des sémocolons. – Gumbo

+0

Merci, l'a réparé. – Zed

12

j'utiliser un tableau:

$types = array(
    1 => 'gif', 
    2 => 'jpg', 
    3 => 'png' 
); 
if (isset($types[$type])) { 
    $type = $types[$type]; 
} else { 
    $type = 'jpg'; 
} 
+0

Nice donc cela pourrait même être réduit à 2 lignes de code à droite? Je déteste la façon dont les gros commutateurs sont surtout quand j'ai besoin de les réutiliser – JasonDavis

+1

@jasondavis: Bien sûr, vous pouvez même mettre tout en une ligne. Mais je préfère la lisibilité. – Gumbo

+0

@jasondavis: Cela dépend du nombre de fois que vous frappez entrer :) – Zed

0

Il semble bien, si vous utilisez cette option pour ouvrir une image GD vous pouvez utiliser un moyen plus simplifié:

ImageCreateFromString(file_get_contents('path/to/your/image.ext')); 
+0

ce n'est pas ce pour quoi il est utilisé – JasonDavis

1

Puisque 2 est identique à la valeur par défaut, vous pouvez le laisser tomber en cascade. J'aime mieux les réponses du tableau, mais si vous avez besoin d'un changement, ce serait une meilleure façon de le faire pour ne pas vous répéter.

$type = 2; 

switch ($type) { 
case 1: 
    $type = 'gif'; 
    break; 
case 3: 
    $type = 'png'; 
    break; 
case 2: 
default: 
    $type = 'jpg'; 
    break; 
} 
+0

Vous pouvez même laisser le 'case 2:' car il est couvert par 'default:'. – Gumbo

+0

Oui, de grossier. C'est ce que j'ai pour taper au lieu de penser. Réponse mise à jour – nilamo

+0

Je l'aurais laissé pour la lisibilité, car il montre clairement ce qu'est la valeur par défaut, et quelle valeur vous devriez utiliser pour un fichier jpg. – nickf