Search code examples
phpdefault-valueoptional-parametersnamed-parametersphp-8

Does PHP allow named parameters so that optional arguments can be omitted from function calls?


Is it possible in PHP to specify a named optional parameter when calling a function/method, skipping the ones you don't want to specify (like in python)?

Something like:

function foo($a, $b = '', $c = '') {
    // whatever
}


foo("hello", $c="bar"); // we want $b as the default, but specify $c

Solution

  • No, it is not possible (before PHP 8.0): if you want to pass the third parameter, you have to pass the second one. And named parameters are not possible either.


    A "solution" would be to use only one parameter, an array, and always pass it... But don't always define everything in it.

    For instance :

    function foo($params) {
        var_dump($params);
    }
    

    And calling it this way : (Key / value array)

    foo([
        'a' => 'hello',
    ]);
    
    foo([
        'a' => 'hello',
        'c' => 'glop',
    ]);
    
    foo([
        'a' => 'hello',
        'test' => 'another one',
    ]);
    

    Will get you this output :

    array
      'a' => string 'hello' (length=5)
    
    array
      'a' => string 'hello' (length=5)
      'c' => string 'glop' (length=4)
    
    array
      'a' => string 'hello' (length=5)
      'test' => string 'another one' (length=11)
    

    But I don't really like this solution :

    • You will lose the phpdoc
    • Your IDE will not be able to provide any hint anymore... Which is bad

    So I'd go with this only in very specific cases -- for functions with lots of optional parameters, for instance...