问题
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