如何避免在PHP中使用一长串的函数参数?

时间:2018-10-11 09:58:32

标签: php variables parameters scope

我的问题是我有很多带有很长的函数参数列表的函数,例如:

function select_items($con,$type,$id_item,$item_timestamp,$item_source_url,$item_type,$item_status,$item_blogged_status,$item_viewcount,$item_language,$item_difficulty,$item_sharecount,$item_pincount,$item_commentcount,$item_mainpage,$item_image_width,$item_image_height,$item_image_color,$item_modtime,$order,$start,$limit,$keyword,$language,$id_author,$id_sub_category,$id_category,$id_tag,$id_user){ ... }

如您所见,它非常长,而且(当然)很难维护。有时我需要所有变量来构造一个超级复杂的sql查询,但有时我只使用其中的1个或2个即可。有没有办法避免这个庞大的参数列表?例如,使用一些严格/特殊的命名约定?

所以基本上我需要这样的东西:

$strictly_the_same_param_name="It's working!";

echo hello($strictly_the_same_param_name);


function hello()  //<- no, or flexible list of variables
{
     return $strictly_the_same_param_name; // but still able to recognize the incoming value        
}

// outputs: It's working! 

我考虑过使用$ _GLOBALs / global或$ _SESSIONs解决此问题,但对我来说似乎并不专业。还是?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用...令牌:

$strictly_the_same_param_name= ["It's working!"];

echo hello($strictly_the_same_param_name);


function hello(...$args)  //<- no, or flexible list of variables
{
    if ( is_array( $args ) {
    $key = array_search( 'What you need', $args );
         if ( $key !== false ) {
             return $args[$key];
         }
    }
    return 'Default value or something else';
}

答案 1 :(得分:1)

第一步,如您所说,有时您只需要使用2个args来调用函数,就可以在函数的声明中为参数设置默认值。这样您就可以在25个参数中仅使用2个参数来调用函数。

例如:

function foo($mandatory_arg1, $optional_arg = null, $opt_arg2 = "blog_post") {
    // do something
}

第二步,您可以使用数组,尤其是在这种情况下,使用数组会更简单:

function foo(Array $params) {
    // then here test your keys / values
}

第三步,您也可以使用Variable-length argument lists(在页面“ ...”中搜索):

function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

但是最终,我认为您应该使用对象来处理此类事情;)