2014-10-28 44 views
0

我有一個數組中有一個變量,其中有很多變量在函數外聲明。使功能訪問外部變量在PHP中

下面是函數的一個精簡版:

function get_badges(){ 
    $badge_array = array(

     array(
      "Comment Freak", 
      ($user_revision >= $revision_master_req) && ($tixx1 >= $tixx2) 
     ), 

     array(
      "Revision Freak", 
      ($user_revisionx55 >= $revision_master_reqx134) && ($tixx11233 >= $tixx1342) 
     ) 

    ); 

    return $badge_array; 
} 

我的問題是,什麼是考慮性能時訪問功能外變量的最佳方式?經研究,我讀我需要使用globals但顯然不是一個好辦法,特別是如果我有很多變數...

+0

將它們作爲一個參數? – vaso123 2014-10-28 15:39:46

+1

將變量作爲函數參數傳遞。例如'函數get_badges($ user_revision,$ revision_master_req ....)'你也可以考慮將數據分組到類對象或數組中,而只傳遞幾個參數。 – Populus 2014-10-28 15:40:14

+0

@lolka_bolka這是如何工作的? – 2014-10-28 15:40:32

回答

1

您需要將您的變量作爲參數,例如:

function get_badges($user_revision, $revision_master_req, etc...){ 
    $badge_array = array(

     array(
      "Comment Freak", 
      ($user_revision >= $revision_master_req) && ($tixx1 >= $tixx2) 
     ), 

     array(
      "Revision Freak", 
      ($user_revisionx55 >= $revision_master_reqx134) && ($tixx11233 >= $tixx1342) 
     ) 

    ); 

    return $badge_array; 
} 
1

你可以傳遞參數作爲一個數組。而且,你可以創建一個輔助函數來爲你構建這個數組,所以你不需要每次構建它。全球不太好,但這次它會幫助你。

$args = getBagesArgs(); 
$bagets = get_badges($args); 

function get_badges($args) { 
    $badge_array = array(
     array(
      "Comment Freak", 
      ($args['user_revision'] >= $args['revision_master_req']) && ($args['tixx1'] >= $$args['tixx2']) 
     ), 
     array(
      "Revision Freak", 
      ($args['user_revisionx55'] >= $args['revision_master_reqx134']) && ($args['tixx11233'] >= $args['tixx1342']) 
     ) 
    ); 
    return $badge_array; 
} 

function getBagesArgs() { 
    global $user_revision, $revision_master_req, $tixx1, $tixx2, $user_revisionx55, $revision_master_reqx134, $tixx11233, $tixx1342; 
    $args = array(
     'user_revision' => $user_revision, 
     'revision_master_req' => $revision_master_req, 
     'tixx1' => $tixx1, 
     'tixx2' => $tixx2, 
     'user_revisionx55' => $user_revisionx55, 
     'revision_master_reqx134' => $revision_master_reqx134, 
     'tixx11233' => $tixx11233, 
     'tixx1342' => $tixx1342 
    ); 
    return $args; 
} 
1

主叫

get_badges(array('user_revision ' => 4211 
    , 'revision_master_req' => 9845 
    , 'tixx1 ' => 778, 
)); 

身體:

function get_badges($all_vars=array()){ 
$badge_array = array(

    array(
     "Comment Freak", 
     ($all_vars['user_revision'] >= $all_vars['revision_master_req']) && ($all_vars['tixx1 ']>= $all_vars['tixx2']) 
    ), 

etc... 
); 
return $badge_array; 
}