Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php default arguments

Tags:

php

arguments

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

like image 988
JDesigns Avatar asked May 11 '11 18:05

JDesigns


2 Answers

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.

like image 54
Marc B Avatar answered Sep 28 '22 20:09

Marc B


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.

like image 26
PeeHaa Avatar answered Sep 28 '22 19:09

PeeHaa