在PHP中使变量外部的函数访问

时间:2014-10-28 15:37:06

标签: php function loops variables

我有一个带有数组的函数,其中包含许多在函数外部声明的变量。

以下是该功能的精简版本:

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,但显然这不是一个好方法,特别是如果我有很多变量......

3 个答案:

答案 0 :(得分: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 :(得分:1)

你可以将params作为数组传递。而且,您可以创建一个小帮助函数,为您构建此数组,因此您不需要每次都构建它。全球不是那么好,但这一次它会对你有帮助。

$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;
}

答案 2 :(得分: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;
}