在函数中使用默认参数

我对PHP函数的默认值感到困惑。说我有一个这样的功能:

function foo($blah, $x = "some value", $y = "some other value") {

// code here!

}

如果我想为$ x使用默认参数并为$ y设置不同的参数怎么办?

我一直在尝试不同的方法,但我变得更加困惑。例如,我尝试了以下两种方法:

foo("blah", null, "test");

foo("blah", "", "test");

但是这两个都不会为$ x产生适当的默认参数。我也试图通过变量名来设置它。

foo("blah", $x, $y = "test");

我完全希望这样的事情能奏效。但这根本不符合我的预期。似乎不管我做什么,每次调用该函数时,无论如何我都必须最终键入默认参数。而且我必须缺少明显的东西。

回答:

我建议按如下所示更改函数声明,以便您可以执行所需的操作:

function foo($blah, $x = null, $y = null) {

if (null === $x) {

$x = "some value";

}

if (null === $y) {

$y = "some other value";

}

code here!

}

这样,您可以像这样进行调用foo('blah', null, 'non-default y

value');并使它按需要工作,其中第二个参数$x仍将获得其默认值。

使用此方法,传递空值意味着要覆盖一个参数的默认值,而要覆盖其后的参数的默认值。

如其他答案所述,

默认参数仅用作该函数的最后一个参数。如果要在函数定义中声明默认值,则无法省略一个参数并在其后覆盖一个参数。

如果我有一个可以接受数量不定的参数以及类型不同的参数的方法,那么我通常会声明类似于Ryan P所示答案的函数。

这是另一个示例(虽然不能回答您的问题,但希望能为您提供有益的参考:

public function __construct($params = null)

{

if ($params instanceof SOMETHING) {

// single parameter, of object type SOMETHING

} else if (is_string($params)) {

// single argument given as string

} else if (is_array($params)) {

// params could be an array of properties like array('x' => 'x1', 'y' => 'y1')

} else if (func_num_args() == 3) {

$args = func_get_args();

// 3 parameters passed

} else if (func_num_args() == 5) {

$args = func_get_args();

// 5 parameters passed

} else {

throw new InvalidArgumentException("Could not figure out parameters!");

}

}

以上是 在函数中使用默认参数 的全部内容, 来源链接: utcz.com/qa/397765.html

回到顶部