Como se mencionó anteriormente, no podrá omitir los parámetros. He escrito esta respuesta para proporcionar algún apéndice, que era demasiado grande para colocar en un comentario.
@Frank Nocke proposes para llamar a la función con sus parámetros por defecto, por lo que tienen por ejemplo
function a($b=0, $c=NULL, $d=''){ //...
se debe utilizar
$var = a(0, NULL, 'ddd');
que funcionalmente ser la misma que la omisión de los dos primeros ($b
y $c
) parámetros.
No está claro cuáles son los valores predeterminados (es 0
tipeado para proporcionar el valor predeterminado, ¿o es importante?).
También existe el peligro de que el problema de los valores predeterminados esté conectado a la función externa (o incorporada), cuando los valores predeterminados podrían cambiarse por el autor de la función (o método). Entonces, si no cambia su llamada en el programa, podría cambiar su comportamiento sin intención.
Algunos solución alternativa podría ser la definición de algunas constantes globales, como DEFAULT_A_B
que sería "valor por defecto 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 más elegante si define constantes de clase, porque son parte del alcance global, por ej.
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 predeterminado se define exactamente una vez en todo el código (no hay valor incluso en declaración de método), por lo que en caso de algunos cambios inesperados, siempre suministrar la función/método con el valor predeterminado correcto .
La claridad de esta solución es, por supuesto, mejor que el suministro de valores por defecto sin procesar (como NULL
, 0
etc.) que no dicen nada a un lector.
(Estoy de acuerdo que llamar como $var = a(,,'ddd');
sería la mejor opción)
@Chuck para lo ¿Estás buscando exactamente? ¿Como una solución alternativa o una clase para implementar esto o ...? – Rizier123
@ Rizier123 Estoy preguntando si la versión actual de PHP soporta saltar argumentos (como en otros lenguajes). Las respuestas actuales pueden estar desactualizadas. De la descripción de la recompensa: "Las respuestas actuales tienen cinco años. ¿La versión actual de PHP cambia las cosas?" –
@Chuck Entonces la respuesta será probablemente: que nada ha cambiado; sin una solución/código, no obtendrá su funcionalidad. – Rizier123