No, no es posible: si desea pasar el tercer parámetro, debe pasar el segundo. Y los parámetros nombrados tampoco son posibles.
Una "solución" sería usar solo un parámetro, una matriz, y siempre pasarlo ... Pero no siempre define todo en ella.
Por ejemplo:
function foo($params) {
var_dump($params);
}
Y llamando de esta manera:
foo(array(
'a' => 'hello',
));
foo(array(
'a' => 'hello',
'c' => 'glop',
));
foo(array(
'a' => 'hello',
'test' => 'another one',
));
Se puede obtener este resultado:
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)
pero no me gusta mucho esta solución:
- Usted perderá el phpdoc
- El IDE no va a ser capaz de proporcionar cualquier indicio más ... lo cual es malo
Así que me gustaría ir con esto sólo en casos muy específicos - para funciones con muchos parámetros opcionales, por ejemplo ...
En realidad, en su ejemplo de código, el '$ c = "bar"' 'es asignar a un bar' sean' $ c' en * el alcance de llamadas * (no en la función llamada 'foo') y luego pasando el valor asignado a 'foo()' como el segundo parámetro, que se recibirá como la variable local '$ b'. – Petruza