2010-11-12 6 views
1

Dans ma fonction, j'ai plusieurs variables:PHP: comment retourner l'étoffe

 $disallowGallery = 1; 
     $disallowFriend = 1; 
     $disallowWall = 1; 
     $disallowPM = 1; 
     $disallowStatusComment = 1; 

Maintenant, j'ai un paramètre de contrôle de $. Si elle contient «Galerie», la fonction doit renvoyer la variable $ disallowGallery. S'il contient 'Friend', il devrait retourner la variable $ disallowFriend.

Je peux le faire moi-même avec beaucoup d'instruction if else/ou un commutateur. Mais existe-t-il un moyen plus efficace/plus simple?

+0

Utilisez simplement un commutateur if/else. Simple et facile (à lire aussi). – BlueDog

Répondre

2
return ${'disallow' . $check}; 
+0

un isset() est probablement souhaitable? –

+1

@jon_darkstar: la gestion des erreurs est laissée au demandeur. –

+0

cela fonctionne bien. S'il ne trouve aucune var avec $ check, il ne retourne rien. – Johnson

3

Vous pouvez utiliser variable variables:

function isDisallowed($type) { 
    $disallowGallery = 1; 
    $disallowFriend = 1; 
    $disallowWall = 1; 
    $disallowPM = 1; 
    $disallowStatusComment = 1; 

    $type = "disallowed$type"; 
    return isset($$type) ? $$type : 1; 
} 

Mais je serais plus tenté de stocker votre configuration dans un tableau associatif:

function isDisallowed($type) { 
    $disallowed = array (
     'Gallery' => 1, 
     'Friend' => 1, 
     // ... 
     'StatusComment' => 1, 
    ); 

    return array_key_exists($type, $disallowed) ? $disallowed[$type] : 1; 
} 
+0

Quelqu'un a une aversion irraisonnée des variables variables. – meagar

+3

+1, réponse très complète, et downvote injuste. – greg0ire

+0

@ greg0ire Merci. J'aurais été plus qu'heureux de débattre des mérites des variables variables si l'électeur down avait laissé un commentaire ... – meagar

4

La propre façon de stocker dans mon les yeux seraient un tableau:

$disallow = array(
    "Gallery" => 1, 
    "Friend" => 1, 
    "Wall" => 1, 
    "PM" => 1, 
    "Comment" => 1 
); 

À l'intérieur d'une fonction de vérification, vous feriez une vérification comme suit:

function check("Comment") 
.... 
if (array_key_exists($area, $disallow)) 
return $disallow[$area]; 
else 
return 0; 
Questions connexes