【问题标题】:PHP pass default argument to functionPHP将默认参数传递给函数
【发布时间】:2011-01-05 15:55:45
【问题描述】:

我有一个 PHP 函数,像这样:

function($foo = 12345, $bar = false){}

我想要做的是调用这个函数,传递默认参数$foo,但是$bar设置为true,像这样(或多或少)

function(DEFAULT_VALUE, true);

我该怎么做?如何在不知道该值的情况下将参数作为函数的默认值传递?

提前致谢!

【问题讨论】:

  • 我现在在想什么..可能没有像 void 这样的值吗?我的意思是,null 是一个值,但是,至少在 Java 中,可以通过使用 void 将虚无更进一步。至少作为一个函数的返回值,如果它不仅返回null,而且实际上什么也没有。
  • PHP 中没有这样的“空白”。 ""null 相同
  • 令人难以置信的是,这个页面上有这么多人完全错过了问题的重点(我认为它很清楚)。

标签: php function default


【解决方案1】:

这在 PHP 中是不可能的。有一些解决方法,例如使用数组而不是一行参数来传递所有参数,but they have massive downsides

我能想到的最好的手动解决方法是定义一个具有任意值的常量,该值不能与实际值发生冲突。例如,对于一个永远不能是-1的参数:

define("DEFAULT_ARGUMENT", -1);

并对此进行测试:

function($foo = DEFAULT_ARGUMENT, $bar = false){}

【讨论】:

    【解决方案2】:

    把它们反过来:

    function($bar = false, $foo = 12345){}
    
    function(true);
    

    【讨论】:

    • 我不能,因为我已经在很多地方使用了这个功能:D
    • @arik-so refractor 那么,弗雷迪的做法,这正是我要回答的问题
    • 通常你没有在太多地方有那些最极端的最后参数,如果你有,可能它们应该在更“前面”的地方
    【解决方案3】:

    通常的处理方法是if (is_null($foo)) 函数将其替换为默认值。使用 null、空字符串等来“跳过”参数。大多数需要跳过参数的内置 PHP 函数都是这样做的。

    <?php
    function($foo = null, $bar = false)
        {
        if (is_null($foo))
            {
            $foo = 12345;
            }
        }
    ?>
    

    【讨论】:

    • 好吧,在我的例子中,参数是一个字符串,null 是一个可接受的值 ^^ 实际上,在我的例子中,或多或少是一个可接受的值。
    • 啊,这比我的回答好多了,其实我以前用过这个,但我忘了。我敢肯定,一些纯粹主义者会反对这种方法。
    • @arik-所以你也可以做一个类型比较,看看NULL是否实际上是NULL而不是一个空字符串(比如===
    【解决方案4】:

    PHP 不能完全做到这一点,因此您必须解决它。由于您已经需要当前形式的函数,只需定义另一个:

    function blah_foo($bar)
    {
        blah(12345, $bar);
    }
    
    function blah($foo = 12345, $bar = false) { }
    

    【讨论】:

    • 这听起来也很有趣^^考虑到任何值都是可以接受的,我认为你的方法是最好的。
    • 不过,我会非常小心地在代码中引入新函数来实现这样的事情。您需要将它们记录下来,牢记在心……以这种方式构建次优代码非常容易
    【解决方案5】:

    我认为,最好根据最常更改的参数进行排序,例如$bar,我们把它放在第一位,

    function foo( $bar = false, $foo = 12345){
    // blah blah...
    }
    

    所以当你想将$bar 传递给true,并将$foo 传递给12345 时,你可以这样做,

    foo(true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多