php default arguments

前端 未结 4 623
北海茫月
北海茫月 2020-12-03 13:58

In PHP, if I have a function written like this

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

And I can call this function

相关标签:
4条回答
  • 2020-12-03 14:16

    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.

    0 讨论(0)
  • 2020-12-03 14:25

    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.

    0 讨论(0)
  • 2020-12-03 14:39

    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);
    
    0 讨论(0)
  • 2020-12-03 14:41

    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.

    0 讨论(0)
提交回复
热议问题