当前位置: 首页 > 面试题库 >

在函数中使用默认参数

姜奇
2023-03-14
问题内容

我对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!");
    }
}


 类似资料:
  • 图 6.1 time1.cpp 中的构造函数将 hour、minute 和 second 初始化为 0(即军用时间午夜11时)。 构造函数可以包含默认参数。图 6.8 重新定义 Time 的构造函数,该函数中每个变量的默认参数为0。通过提供构造函数默认参数,即使在构造函数调用中不提供数值,对象也能利用默认参数初始化为一致状态。程序员提供所有参数默认值(或显式不要求参数)的构造函数也称为默认构造函数

  • 对于一些函数,你可能希望它的一些参数是 可选 的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。这个功能借助于默认参数值完成。你可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。 注意,默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的——这会在后面的章节中做详细解释。从现在开始,请记住这一点。 使用默认参数值 例7.5 使用默认参数值 #!

  • 在 C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。 所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。下面是一个简单的示例: 运行结果: 10, 3.5, # 2

  • Scala 函数 Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: object Test { def main(args: Array[String]) { println( "返回值 : " + addInt() ); } def

  • 当我将firstThing(第一件事)设置为default(默认值)时,如果没有默认值nil(默认值),这将起作用,我会得到一个错误,即调用函数时缺少参数。 通过键入Int 我认为它使它成为可选的,默认值为零,对吗?如果是这样,为什么没有=nil它就不能工作?

  • 本文向大家介绍实例讲解在C++的函数中变量参数及默认参数的使用,包括了实例讲解在C++的函数中变量参数及默认参数的使用的使用技巧和注意事项,需要的朋友参考一下 包含变量参数列表的函数 如果函数声明中最后一个成员是省略号 (...),则函数声明可采用数量可变的参数。在这些情况下,C++ 只为显式声明的参数提供类型检查。即使参数的数量和类型是可变的,在需要使函数泛化时也可使用变量参数列表。函数的系列是