开发者

Is passing NULL param exactly the same as passing no param

I'm working with a function whose signature looks like this

afunc(string $p1, mixed $p2, array $p3 [, int $p4 = SOM_CONST [, string $p5 ]] )

In some cases I don't have data for the last parameter $p5 to pass, but for the sake of consistency I still want to pass something like NULL. So my question, does PHP treat passing a NULL exactl开发者_Python百科y the same as not passing anything?

somefunc($p1, $p2, $p3, $p4 = SOM_CONST);
somefunc($p1, $p2, $p3, $p4 = SOM_CONST, NULL);


No. Presumably, the exact signature is:

function afunc($p1, $p2, $p3, $p4 = SOM_CONST)

and the function uses func_get_arg or func_get_args for $p5.

func_num_args will be different depending whether you pass NULL. If we do:

{
    echo func_num_args();
}

then

afunc(1,2,3,4,NULL);

and

afunc(1,2,3,4);

give 5 and 4.

It's up to the function whether to handle these the same.


No. It is only the same if the parameter's default value is NULL, otherwise not:

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

a(1, 2, NULL);

prints NULL.

So you cannot say it is always the same. NULL is just another value and it is not that special.


Not to mention non-optional parameters: Calling a(1) would give you an error (warning) but a(1,NULL) works.


Passing NULL is exactly the same as not passing an argument - if the default value is NULL, except in the context of the func_num_args function:

Returns the number of arguments passed to the function.

<?php

function test($test=NULL) {
    echo func_num_args();
}

test(); //outputs: 0
test(NULL); //outputs: 1

?>


First of all, your function signature is incorrect. It is highly recommended in PHP to keep the optional parameters after all the non optional parameters.

At that point, if you need to skip some of the optional parameters, you can provide NULL as their values and the function will use their default value. It will be similar to using the null coalesce operator in $x = $x ?? 12. This code will set $x to 12 only if $x === NULL.

Using the number of arguments with func_num_args() should not even be mentioned here because no matter what the value of the argument is, if you pass an argument in the function call, then that argument will be noticed by the function. And when it comes to the inner workings of the function, an extra NULL argument is just as good as any other value. Your code might need an argument to be NULL in order to perform some task.

The only special treatment happens when an optional function parameter is filled with a NULL argument.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜