【问题标题】:PHP call function with default arguments带默认参数的 PHP 调用函数
【发布时间】:2014-03-22 11:30:40
【问题描述】:

在许多语言中我可以这样做:

function f(a = 0, b = 0, c = 0)
{
   // Do something
}

f(b=3, c=4);

我可以在 PHP 中做这样的事情吗?

真的非常感谢!

【问题讨论】:

  • 你试过了吗?
  • 简单的答案是“否”,PHP 在调用函数时不支持命名参数
  • @Shankar 可能是因为它不是。没有像示例中那样命名参数的语法,也没有用于跳过位置参数的关键字。
  • @IMSoP, func_get_args 可以间接帮助吗?

标签: php function arguments default


【解决方案1】:

不,很遗憾,您不能在 PHP 中“跳过”参数,因此只能在列表末尾使用默认值。

所以你可以这样写:

 function foo($a=0, $b=0) {}
 foo(42);

这里$b 将有其默认值,但$a 不会,因为我们提供了一个值作为输入。

但是,如果不为$a 提供一个值,就无法为$b 提供一个值——我们必须提供$b 的值作为第二个参数,而PHP 没有我们可以使用的关键字来代替第一个参数说“使用默认值”。

有人谈论将命名参数添加到 PHP 的未来版本,类似于您的非 PHP 示例。

不过,您可以通过对代码进行一些更改来模拟这一点;几个想法:

  • 将null 视为“使用默认值”,写成$a = is_null($a) ? 42 : $a
  • 让您的函数将关联数组作为其唯一参数,并从中获取值,就好像它们的键是参数名称一样

【讨论】:

    【解决方案2】:

    确实。

    function foo($bar = "test") {
        echo "I want ".$bar;
    }
    

    【讨论】:

      【解决方案3】:

      在 PHP 中这是不可能的:参见PHP Manual。函数参数总是从左到右计算。

      然而,

      f($b=3, $c=4);
      

      是可能的,但会做一些不同的事情,正如您所期望的:在调用函数 f() 之前,对参数进行评估(变量 $b 和 $c 分别被赋值为 3 和 4),然后是函数被称为

      f(3,4)
      

      作为副作用,变量 $b 和 $c 被设置为新值。

      【讨论】:

        猜你喜欢
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 1970-01-01
        相关资源
        最近更新 更多