Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 
like image 755
Stefano Borini Avatar asked Aug 27 '09 18:08

Stefano Borini


People also ask

Are parameters optional in PHP?

When creating functions in PHP it is possible to provide default parameters so that when a parameter is not passed to the function it is still available within the function with a pre-defined value. These default values can also be called optional parameters because they don't need to be passed to the function.

Are parameter names optional?

By default, all parameters of a method are required. But in C# 4.0, the concept of optional parameters was introduced that allows developers to declare parameters as optional.

Are function parameters are optional?

Optional parameters are great for simplifying code, and hiding advanced but not-often-used functionality. If majority of the time you are calling a function using the same values for some parameters, you should try making those parameters optional to avoid repetition.

Can parameters be optional?

The definition of a method, constructor, indexer, or delegate can specify its parameters are required or optional. Any call must provide arguments for all required parameters, but can omit arguments for optional parameters. Each optional parameter has a default value as part of its definition.


1 Answers

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...

like image 121
Pascal MARTIN Avatar answered Sep 22 '22 21:09

Pascal MARTIN