Usted puede usar func_get_args
. Ejemplo:
function foo($optional=null) {
if (count(func_get_args()) > 0)
echo "optional given\n";
else
echo "optional not given\n";
}
foo(); //optional not given
foo(null); //optional given
Tenga en cuenta que la convención utilizada para funciones de PHP internos es siempre dar argumentos opcionales un valor predeterminado y para hacer que tienen el mismo comportamiento cuando ambos argumento no se da y se da explícitamente su valor por defecto. Si alguna vez encuentra lo contrario, presente un informe de error. usted hace cosas de este let así sin if
s:
function strpos_wrap($haystack, $needle, $offset = 0) {
return strpos($haystack, $needle, $offset);
}
Esta convención se aplica más es espacio de usuario, como la dificultad que condujo a esta pregunta se ha mostrado. Si la convención no se ajusta a sus necesidades, al menos reconsidere su enfoque. El propósito de func_num_args
/func_get_args
es principalmente permitir funciones de argumento variables.
Esa es una manera realmente tonta para que se comporte una función. 'f (0)' debería producir el mismo resultado, independientemente de la "fuente" del argumento '0'. –
No si está creando un método polimórfico que hace una cosa si el parámetro está establecido y otra cosa si el parámetro no está establecido. – StackOverflowNewbie
Frank, algunas funciones integradas hacen esto, en mi caso necesitaba envolver substr, y cuando pasé el argumento predeterminado de wrappers $ length de null a substr, no obtuve nada, ya que substr interpreta eso como 0 length. Sí, es terriblemente tonto, he llegado a esperar nada mejor de PHP. –