2010-11-12 74 views
1

在我的功能我有更多的變量:PHP:如何返回正確的東西

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

現在,我有一個$檢查參數。如果它包含'Gallery',則該函數應該返回$ disallowGallery變量。如果它包含「朋友」,它應該返回$ disallowFriend變量。

我可以自己做很多if else語句/或開關。但是否存在更有效/更簡單的方法?

+0

只需使用if/else開關concstruct即可。簡單易用(也可以閱讀)。 – BlueDog 2010-11-12 20:50:52

回答

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

isset()可能是可取的嗎? – 2010-11-12 20:50:46

+1

@jon_darkstar:錯誤處理留給提問者。 – 2010-11-12 20:52:43

+0

這工作很好。如果它沒有用$ check查找任何變量,它不會返回任何內容。 – Johnson 2010-11-12 20:56:23

3

您可以使用variable variables

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

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

但我會更傾向於存儲在一個關聯數組,你的配置:

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

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

有人對變量有着無理的反感。 – meagar 2010-11-12 20:50:57

+3

+1,非常完整的答案,不公平的downvote。 – greg0ire 2010-11-12 20:53:23

+0

@ greg0ire謝謝。如果下來選民留下了評論,我會非常樂意辯論變量變量的優點... – meagar 2010-11-12 20:56:43

4

存儲在這個最乾淨的方式我眼睛會是陣列:

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

在檢查功能中,您可以執行如下檢查:

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