跳过函数参数?

时间:2011-03-22 16:26:57

标签: php function parameters parameter-passing

我有这个问题,但我不知道如何命名,例如,我有这个功能,

function test($param1,$param2 = false,$param3 = false)
{

    if($param2 == true)
    {
        return '2';
    }

    elseif($param3 == true)
    {
        return '3';
    }

    else 
    {
        return '1';
    }
}

为了返回'3',我必须像这样唤起我的功能,

$test = test('test',false,true);

我想问一下我是否可以跳过第二个参数并通过唤起这样的函数返回'3'?

$test = test('test',$param3 = true);

还是其他任何方法?

5 个答案:

答案 0 :(得分:4)

您可以伪造命名参数,如SO:

所示

Emulating named function parameters in PHP, good or bad idea?

以下是您应在此页面上寻找的正确答案的示例:

function myFunc (array $args) {
    $default = array(
        "name" => "John Doe",
        "age" => "30"
    );
    // overwrite all the defaults with the arguments
    $args = array_merge($defaults, $args);
    // you *could* extract($args) here if you want

    echo "Name: " . $args['name'] . ", Age: " . $args['age'];
}

myFunc(array("age" => 25)); // "Name: John Doe, Age: 25"

答案 1 :(得分:1)

您可以传递数组中的参数:

$params = array(
    'param1' => 'test',
    'param3' => true
);

$result = myFunction($params);

function myFunction($params) {
    if (isset($params['param3']) && $params['param3']) {
        return 3;
    }
}

答案 2 :(得分:0)

您可以为这样的参数设置默认值:

function someFunction( $varA, $varB=false, $varC=false)
{
    if($varB==true)
    {
      return 'b';
    }
}

调用此功能时,您可以执行someFunction(true)someFunction(true, true)someFunction(true, true, true)。唯一的问题是你不能在没有声明B的情况下声明A和C.

编辑: 错过了第一线。您也可以将变量作为数组传递。

答案 3 :(得分:0)

不,没有办法做到这一点。如果要将$ param3传递给函数,则必须在函数签名中传递$ param3之前的所有参数。

答案 4 :(得分:0)

  

我想问一下我是否可以跳过第二个参数并通过唤起这样的函数返回'3'?

不,你不能。 “跳过”参数的唯一方法是发送类似NULL的内容。但是你的功能需要看起来像:

function foo($a, $skip_me = NULL, $b = 1);
{
  if ($skip_me === NULL) $skip_me = false; // set the default value like this
}

foo(1, NULL, 2);

另一个选项是发送一个数组并使该函数采用单个参数。如果你有很多可选参数,这可能很有用。