【问题标题】:PHP - Inherit function default valuePHP - 继承函数默认值
【发布时间】:2011-05-15 08:41:06
【问题描述】:

我有一个看起来像这样的函数:

function test($arg1 = 'my_value', $arg2 = 'second')
{
}

当我调用它时,我只想将第二个值设置为不同的值,如下所示:

test(inherit, 'changed value');

我发现可以将此行添加到我的函数中(当我的“继承”更改为空时):

$arg1 = ( is_null( $arg1 ) ? 'my_value' : $arg1 );

有没有更好的方法,更好的方法来解决它?

【问题讨论】:

  • 你的问题有答案

标签: php function default inheritance


【解决方案1】:

根据参数的性质和数量,使用命名参数(至少是模拟的)可能是合理的:

function xyz($args) {
    $args += array(
        'x' => 'default',
        'q' => 'default 2',
        // ...
    );

    // ...
}

xyz(array('q' => 'hehe, not default'));

【讨论】:

  • 似乎这是最好的建议。不完美,但目前似乎没有更好的方法。谢谢!
  • 一个想法是在xyz 中使用extract($args)。这样,您可以使用$q 而不是$args['q']
【解决方案2】:

你解决它的方法实际上非常有用。

另一种方法是每次在函数调用时传递与默认值相同的值。

如果这是结构性的,那么您必须重新考虑功能。

【讨论】:

    【解决方案3】:

    制作两个不同的函数:

    // Full function
    function testex($arg1 = 'my_value', $arg2 = 'second')
    {
    }
    
    // Shorthand when just argument 2 is needed
    function test2($arg2 = 'second')
    {
      return testex('my_value', $arg2);
    }
    

    这样,当您不需要时,您不必将 null 传递给第一个参数。

    【讨论】:

      【解决方案4】:

      你必须翻转它们,你不能将第一个值留为空白,

      设置第一个值,让第二个为默认值;

      更新:

      如果您希望参数具有动态长度,请考虑使用 func_get_args();

      function something() {
          $args = func_get_args();
        ....
      }
      

      然后您可以针对不同的值或数据类型测试您的参数,以使它们做任何您想做的事情

      【讨论】:

      • 不够好。在我的实际功能中,有比这些更多的价值。我不能只是切换它们来试图忽略这个问题。在其他情况下,我想做相反的事情。
      猜你喜欢
      • 1970-01-01
      • 2017-10-04
      • 2015-07-09
      • 2011-05-20
      • 1970-01-01
      • 2016-03-24
      • 2018-04-18
      • 2016-12-05
      • 2021-06-02
      相关资源
      最近更新 更多