help with passing arguments to function

為{幸葍}努か 提交于 2020-01-09 08:04:08

问题


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

回答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.




回答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);



回答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.




回答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.




回答5:


It's just not possible in PHP.




回答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>


来源:https://stackoverflow.com/questions/1870917/help-with-passing-arguments-to-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!