我的问题是我有很多带有很长的函数参数列表的函数,例如:
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解决此问题,但对我来说似乎并不专业。还是?
答案 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;
}
但是最终,我认为您应该使用对象来处理此类事情;)