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


Make function access outside variables in 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,但显然这不是一个好方法,特别是如果我有很多变量。。。

您需要将变量作为参数传递,例如:

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

您可以将params作为数组传递。此外,您还可以创建一个小的辅助函数,为您构建这个数组,所以您不需要每次都构建它。Global不太好,但这次它会帮助你。

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

调用

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