PHP默认参数

发布于 2024-11-06 18:27:10 字数 456 浏览 2 评论 0原文

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

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

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

example($argument1)

但是如果我想给第三个参数一些值, 我应该这样做

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

还是

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

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

谢谢

In PHP, if I have a function written like this

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

And I can call this function in other place like this

example($argument1)

But if I want to give some value to the thrid argument,
Should I do this

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

Or

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

I think both will work but what is the better way? Because in future if the value for the $argument2 is changed in the main function and if I have "", then will there be any problem? Or NULL is the best option?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

楠木可依 2024-11-13 18:27:10

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

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

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

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


下面是一些示例代码:

<?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,该值就会传递到函数并覆盖函数定义中设置的默认值。

Passing null or "" for a parameter you don't want to specify still results in those nulls and empty strings being passed to the function.

The only time the default value for a parameter is used is if the parameter is NOT SET ALL in the calling code. example('a') will let args #2 and #3 get the default values, but if you do example('a', null, "") then arg #3 is null and arg #3 is an empty string in the function, NOT the default values.

Ideally, PHP would support something like example('a', , "") to allow the default value to be used for arg #2, but this is just a syntax error.

If you need to leave off arguments in the middle of a function call but specify values for later arguments, you'll have to explicitly check for some sentinel value in the function itself and set defaults yourself.


Here's some sample code:

<?php

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

and for various inputs:

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

Note that as soon you specify ANYTHING for the argument in the function call, that value is passed in to the function and overrides the default that was set in the function definition.

溺孤伤于心 2024-11-13 18:27:10

您可以使用:

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

或者

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

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

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

我认为这完全取决于带有参数的函数内部发生的情况。

You can use either:

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

Or

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

You can always check for NULL using instead of empty string:

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

I think it all depends on what happens inside the function with the args.

能怎样 2024-11-13 18:27:10

我认为如果您在函数定义中将可选参数定义为 null 并保持这种方式,从而将它们称为 example($argument1, NULL, $argument="测试”)。只需确保如何在函数本身中使用 null 参数即可不引发任何警告。只要您确定如何在函数本身中使用该参数,您也可以使用 false

如果你似乎经常遇到这个问题,更好的方法可能是对变量选项使用单个关联数组:

function example($optionsIn = array()) {

    $options = array(
        'var1' => null,
        'var2' => 'something',
        'var3' => 'else'
    ) ;

    $options = array_merge($options, $optionsIn) ;
}


$options = array(
    'var2' => 'different'
) ;

example($options) ;

这样你就可以传入你想要的任何函数参数,保留任何其他参数,并确保定义了适当的默认值函数内。

唯一的缺点是预期的参数隐藏在函数签名中,但您可以将它们记录在函数的文档块中。

I think you will be better served if you define the optional parameters as null in the function definition and keep it that way, thus calling them as example($argument1, NULL, $argument="test"). Just be sure of how you use the null'd parameters in the function itself to not raise any warnings. You can use false too as long as you're certain of how you use that parameter in the function itself.

If you seem to get this issue alot, a better way may be to use a single associative array for the variable options:

function example($optionsIn = array()) {

    $options = array(
        'var1' => null,
        'var2' => 'something',
        'var3' => 'else'
    ) ;

    $options = array_merge($options, $optionsIn) ;
}


$options = array(
    'var2' => 'different'
) ;

example($options) ;

That way you can pass in any function parameters you wish, leaving any others out and making sure there are the appropriate defaults defined within the function.

The only drawback is that the expected parameters are hidden from the function signature but you can document them in the function's docblock.

冷︶言冷语的世界 2024-11-13 18:27:10

这取决于功能的规格。

function a($b=true,$c=false){
 echo $b?'true':'false';
 }

执行

 a(NULL, 1);

结果:。但只是 a() 结果: true

这意味着您想要默认参数,那么您应该使用默认参数:

 a(true, 1);

It depends on spesification of function.

function a($b=true,$c=false){
 echo $b?'true':'false';
 }

executing

 a(NULL, 1);

results : false. but simply a() results : true

That means you want default argument, then you should use as default:

 a(true, 1);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文