Como se mencionó anteriormente, no podrá omitir parámetros. Escribí esta respuesta para proporcionar un apéndice, que era demasiado grande para incluirlo en un comentario.
@Frank Nocke propone llamar a la función con sus parámetros predeterminados, por ejemplo, tener
function a($b=0, $c=NULL, $d=''){ //...
Deberías usar
$var = a(0, NULL, 'ddd');
que funcionalmente será lo mismo que omitir los dos primeros ( $b
y$c
) parámetros.
No está claro cuáles son los predeterminados (se 0
escribe para proporcionar un valor predeterminado, ¿o es importante?).
También existe el peligro de que el problema de valores predeterminados esté conectado a una función externa (o incorporada), cuando el autor de la función (o método) podría cambiar los valores predeterminados. Entonces, si no cambia su llamada en el programa, podría cambiar involuntariamente su comportamiento.
Una solución podría ser definir algunas constantes globales, como las DEFAULT_A_B
que serían "valor predeterminado del parámetro B de la función A" y "omitir" parámetros de esta manera:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
Para las clases, es más fácil y elegante definir las constantes de clase, porque son parte del alcance global, por ejemplo.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
// method body
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B); //etc.
Tenga en cuenta que esta constante predeterminada se define exactamente una vez en todo el código (no hay ningún valor incluso en la declaración del método), por lo que en caso de algunos cambios inesperados, siempre proporcionará la función / método con el valor predeterminado correcto.
La claridad de esta solución es, por supuesto, mejor que proporcionar valores predeterminados sin procesar (como NULL
, 0
etc.) que no le dicen nada al lector.
(Estoy de acuerdo en que llamar como $var = a(,,'ddd');
sería la mejor opción)