php 默认参数

2022-08-30 21:07:21

在PHP中,如果我有一个这样的函数

function example($argument1, $argument2="", $argument3="")

我可以在其他地方调用这个函数,就像这样

example($argument1)

但是,如果我想给第三个论点一些价值,我应该这样做吗?

example($argument1, "", "test");

 example($argument1, NULL, "test");

我认为两者都会起作用,但更好的方法是什么?因为将来如果$argument 2的值在main函数中更改并且如果我有“”,那么会有任何问题吗?或者NULL是最好的选择?

谢谢


答案 1

对于您不想指定的参数,传递 或 仍会导致这些 null 和空字符串被传递给函数。null""

仅当参数在调用代码中未全部设置时,才会使用参数的默认值。 将让 args #2 和 #3 获取默认值,但如果这样做,则 arg #3 为 null,arg #3 是函数中的空字符串,而不是默认值。example('a')example('a', null, "")

理想情况下,PHP将支持允许将默认值用于arg #2之类的东西,但这只是一个语法错误。example('a', , "")

如果需要在函数调用过程中省略参数,但为后面的参数指定值,则必须显式检查函数本身中的某个 sentinel 值,并自行设置默认值。


下面是一些示例代码:

<?php

function example($a = 'a', $b = 'b', $c = 'c') {
        var_dump($a);
        var_dump($b);
        var_dump($c);
}

对于各种输入:

example():
string(1) "a"
string(1) "b"
string(1) "c"

example('z'):
string(1) "z"
string(1) "b"
string(1) "c"

example('y', null):
string(1) "y"
NULL
string(1) "c"

example('x', "", null):
string(1) "x"
string(0) ""
NULL

请注意,一旦在函数调用中为参数指定了 ANYTHING,该值就会传递给函数并覆盖在函数定义中设置的默认值。


答案 2

您可以使用以下任一方法:

example($argument1, '', 'test');

example($argument1, NULL, 'test');

您始终可以使用空字符串而不是空字符串来检查 NULL:

if ($argument === NULL) {
    //
}

我认为这完全取决于函数内部与 args 发生的情况。


推荐