help with passing arguments to function

function get_tags_by_criteria($gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%", $tag="") {

when i just want to pass the tag argument and let the others by default, how do i write?

ive tried this but it didnt work.

    get_tags_by_criteria("", "", "", "", "", "", computer);

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You can simulate named arguments using an associative array:

function my_function($options)
 {
  extract($options);
 }

then call

my_function(array("parameter1" => "value1", "parameter2" => "value2"));

that, combined with robust checking and table of default values inside the function, works very nicely for me.

Downside: There is no phpDoc convention to document the arguments, and your IDE will not be able to show the available arguments to you as you type. You will have to enter the available parameters into the @desc block which, depending on your IDE, may or may not look nice.

One workaround for this is to declare all the parameters in the function, but make all of them but the first one optional. The first one can then be the associative array containing the values.

Solution 2

Put the tag argument first:

function get_tags_by_criteria($tag="", $gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%") 

And call it like this:

get_tags_by_criteria(computer);

Solution 3

There is no named parameter passing in PHP. Generally if you have more than about 4 parameters and lots of them are optional you might want to consider using an array or object instead:

function get_tags_by_criteria($args) {
  ...
}

get_tags_by_criteria(array('gender' => 'M', 'tag' => 'php'));

You can explicitly set the parameters allowed by using an object instead.

Solution 4

Unfortunately you can’t do this – unspecified optional arguments always have to be at the tail end of a function argument list. Instead, what you can do is use NULL for the arguments you don’t wish to specify and then have your function check to see if an argument is NULL and assign it the default value instead.

Solution 5

It’s just not possible in PHP.

Solution 6

The CakePHP framework often uses associative arrays to specify a set of options. It will even let you specify either individual parameters or an associative array. See the find methods on the model class as an example.

Here’s my attempt at making your function more flexible:

<?php
function get_tags_by_criteria(
    $gender = '%', 
    $min_age_of_birth = '%', 
    $max_age_of_birth = '%', 
    $country = '%', 
    $region = '%', 
    $city = '%', 
    $tag = '') 
{
    if (is_array($gender))
    {
        $options = $gender;
        $gender = '%'; // reset to default
        extract($options);
    }

    $msg = "gender=$gender, min_age=$min_age_of_birth, " .
        "max_age=$max_age_of_birth, country=$country, region=$region, " .
        "city=$city, tag=$tag";
    return $msg;
}
?>
<p><?php echo get_tags_by_criteria('M'); ?></p>
<p><?php echo get_tags_by_criteria('M', 10); ?></p>
<p><?php echo get_tags_by_criteria(array(
    'country' => 'ca', 
    'tag' => 'sample')); ?></p>

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply