function get_tags_by_criteria($gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%", $tag="") {
当我只想传递tag参数并默认让其他参数时,我该怎么写?
我试过这个,但它没有用。
get_tags_by_criteria("", "", "", "", "", "", computer);
答案 0 :(得分:2)
首先放置标记参数:
function get_tags_by_criteria($tag="", $gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%")
并称之为:
get_tags_by_criteria(computer);
答案 1 :(得分:2)
在PHP中没有传递命名参数。通常,如果您有超过4个参数且其中许多是可选的,您可能需要考虑使用数组或对象:
function get_tags_by_criteria($args) {
...
}
get_tags_by_criteria(array('gender' => 'M', 'tag' => 'php'));
您可以使用对象显式设置允许的参数。
答案 2 :(得分:2)
您可以使用关联数组模拟命名参数:
function my_function($options)
{
extract($options);
}
然后致电
my_function(array("parameter1" => "value1", "parameter2" => "value2"));
结合强大的检查和函数内部的默认值表,对我来说效果非常好。
下行:没有phpDoc约定来记录参数,并且您的IDE将无法在您键入时显示可用的参数。您必须在@desc
块中输入可用参数,这取决于您的IDE,可能看起来也可能不太好。
对此的一种解决方法是声明函数中的所有参数,但是将所有参数设置为第一个可选参数。第一个可以是包含值的关联数组。
答案 3 :(得分:1)
不幸的是你不能这样做 - 未指定的可选参数总是必须位于函数参数列表的尾端。相反,你可以做的是对你不希望指定的参数使用NULL,然后让你的函数检查一个参数是否为NULL,并为其指定默认值。
答案 4 :(得分:0)
这在PHP中是不可能的。
答案 5 :(得分:0)
CakePHP框架通常使用关联数组来指定一组选项。它甚至可以指定单个参数或关联数组。请参阅模型类中的find methods作为示例。
这是我尝试让您的功能更灵活:
<?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>