帮助将参数传递给函数

时间:2009-12-09 00:43:30

标签: php function tags

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

当我只想传递tag参数并默认让其他参数时,我该怎么写?

我试过这个,但它没有用。

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

6 个答案:

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