2012-06-11 13 views
12

en PHP podemos pasar argumentos por defecto a una función como talPHP función argumento por defecto llamada

function func_name(arg1,arg2=4,etc...) { 

pero a mi entender no podemos pasar una llamada a la función así que esto es ilegal:

function func2_name(arg1,arg2=time(),etc...) { 

así que cuando quiero hacer un valor de función (imagine como la función de tiempo el valor no puede conocerse antes del tiempo de ejecución) Tengo que hacer un tipo de trabajo sucio como el siguiente:

function func3_name(arg1,arg2=null,etc...) { 
    if(arg2==null) arg2 = time(); 

Me preguntaba si alguien sabe una mejor manera, una forma más limpia de pasar los valores de llamada de función como argumentos predeterminados en php? Gracias.

¿Existe alguna razón fundamental en el diseño del lenguaje php que no permita llamadas a funciones como argumentos predeterminados (como hacer algo especial en el preprocesamiento?) O podría convertirse en una característica en versiones futuras?

+2

Eso no me parece desordenado. – Josh

+1

Eche un vistazo a [esta pregunta similar] (http://stackoverflow.com/questions/8740687/php-function-as-parameter-default) para ver las alternativas. – Quantastical

Respuesta

13

Bueno, la respuesta corta es que no hay una mejor manera de hacerlo, que yo sepa. Sin embargo, puede hacer que parezca algo más ordenado utilizando operadores ternarios.

function func3_name(arg1,arg2=null,etc...) { 
    arg2 = (arg2==null ? time() : arg2); 
} 
+2

creo que quieres decir arg2 = (arg2 == null)? tiempo(): arg2; –

2

Connor es 100% correcto; sin embargo, a partir de PHP 7, ahora puede usar el null coalesce operator.

decir

$arg2 = $arg2 ?? time(); 

Sólo una, sin duda más limpio, camino más corto para escribirlo.

Cuestiones relacionadas