Catso
Catso

Reputation: 153

How to avoid a really long list of function parameters in PHP?

My problem is that I have lots of functions with VERY long lists of function parameters such as this one:

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){ ... }

As you can see its super long and (of course) very hard to maintain. Sometimes I need all of the variables to construct a super complex sql query, but sometimes I just use 1 or 2 of them. Is there a way to avoid this colossal list of parameters? For example with some strict / special naming convention ?

So basically I need something like this:

$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! 

I thought about using $_GLOBALs / global or $_SESSIONs to solve this problem but it doesn't seems really professional to me. Or is it?

Upvotes: 4

Views: 1548

Answers (2)

WizardNx
WizardNx

Reputation: 717

For a first step, as you said, sometimes you need to call the function with only 2 args, you can set default values to your arguments in the declaration of your function. This will allow you to call your function with only 2 args out of 25.

For example:

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

In a second step, you can use, and especially for that case, arrays, it will be way more simple:

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

In a third step, you can also use Variable-length argument lists (search in the page "..."):

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

But ultimately, I think you should use objects to handle such things ;)

Upvotes: 2

Volod
Volod

Reputation: 1437

You can try use ... token:

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

Upvotes: 1

Related Questions