【问题标题】:skipping a function parameter?跳过函数参数?
【发布时间】:2011-07-20 15:40:04
【问题描述】:

我有这个问题但是不知道怎么命名,比如我有这个功能,

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

或者其他方法可以做到这一点?

【问题讨论】:

    标签: php function parameters parameter-passing


    【解决方案1】:

    你可以在数组中传递参数:

    $params = array(
        'param1' => 'test',
        'param3' => true
    );
    
    $result = myFunction($params);
    
    function myFunction($params) {
        if (isset($params['param3']) && $params['param3']) {
            return 3;
        }
    }
    

    【讨论】:

      【解决方案2】:

      我想问我是否可以通过调用这样的函数来跳过第二个参数并返回“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);
      

      另一种选择是发送一个数组并让函数接受一个参数。如果您有很多可选参数,这会很有用。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          调用函数时,可以使用someFunction(true)someFunction(true, true)someFunction(true, true, true)。唯一的问题是你不能在不声明 B 的情况下声明 A 和 C。

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

          【讨论】:

            【解决方案5】:

            您可以伪造命名参数,如此处所示:

            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"
            

            【讨论】:

            • 谢谢。我认为它不应该是$defaults 的“s”。该行应该是 - $args = array_merge($default, $args);
            猜你喜欢
            • 2018-06-13
            • 2019-05-24
            • 2021-12-23
            • 2015-12-07
            • 2012-04-10
            • 2013-10-02
            • 1970-01-01
            • 2020-12-07
            相关资源
            最近更新 更多