在 PHP 方法调用中,可选参数是否需要位于参数列表的末尾


Are optional arguments required to be at the end of the argument list in PHP method calls?

function dosomething($var1, $var2, $var3='somevalue'){
..
}

怎么样

function dosomething($var3='somevalue',$var1, $var2 )
{
}

我们以后可以调用doSomething(,1,2(;吗?

不过,这似乎会产生编译错误。

来自PHP文档:

请注意,使用默认参数时,任何

默认值都应位于任何非默认参数的右侧;否则,事情将无法按预期工作。

如果你想有灵活的参数数量,你可以弄乱func_num_args()func_get_arg()func_get_args()函数。

如果你想尝试,你总是可以做:

dosomething(['', $var1, $var2]);

在定义中:

function dosomething (array $Param) {
  // Put them into individual variables (only if you want)
  $Opt = $Param[0];
  $val1 = $Param[1];
  $val2 = $Param[2];
  }

有了这个,您甚至可以做到:

dosomething([1 => $var1, 0 => '', $var2]);

它将同样工作

笔记:

  • 作为实验是一件有趣的事情。我不会将上面的代码用于任何严肃的事情
  • ['a', 'b']仅适用于自 PHP> 5.4 以来的数组。对于 PHP <= 5.3 少,请改用 array()

根据您的主题问题。是的,可选参数可以放在任何地方。但是它没用(当可选参数先行时(,除非在大小写上。使用类型提示和 null 作为默认值时。

毫无意义的例子(目前(

function dosomething($var3='somevalue',$var1, $var2 )
{
}

不能使用第一个参数的默认值。默认参数值

允许的示例

function dosomething(stdClass $var3=null,$var1, $var2 )
{
}

您可以在第一个参数中传递 null。类型提示

附言但是建议跳过可选参数。如果它被接受并发布,您可以在方法中的每个位置定义可选。