suma - recorrer un array multidimensional php
¿Puedes almacenar una función en una matriz de PHP? (3)
Desde PHP "5.3.0 funciones anónimas disponibles", ejemplo de uso:
tenga en cuenta que esto es mucho más rápido que usar la antigua función create_function
...
//store anonymous function in an array variable e.g. $a["my_func"]
$a = array(
"my_func" => function($param = "no parameter"){
echo "In my function. Parameter: ".$param;
}
);
//check if there is some function or method
if( is_callable( $a["my_func"] ) ) $a["my_func"]();
else echo "is not callable";
// OUTPUTS: "In my function. Parameter: no parameter"
echo "/n<br>"; //new line
if( is_callable( $a["my_func"] ) ) $a["my_func"]("Hi friend!");
else echo "is not callable";
// OUTPUTS: "In my function. Parameter: Hi friend!"
echo "/n<br>"; //new line
if( is_callable( $a["somethingElse"] ) ) $a["somethingElse"]("Something else!");
else echo "is not callable";
// OUTPUTS: "is not callable",(there is no function/method stored in $a["somethingElse"])
REFERENCIAS:
Función anónima: http://cz1.php.net/manual/en/functions.anonymous.php
Prueba de invocable: http://cz2.php.net/is_callable
p.ej:
$functions = array(
''function1'' => function($echo) { echo $echo; }
);
es posible? ¿Cuál es la mejor alternativa?
Hay algunas opciones. Use create_function
:
$functions = array(
''function1'' => create_function(''$echo'', ''echo $echo;'')
);
Simplemente almacene el nombre de la función como una cadena (esto es efectivamente lo que está haciendo create_function
):
function do_echo($echo) {
echo $echo;
}
$functions = array(
''function1'' => ''do_echo''
);
Si está utilizando PHP 5.3, puede hacer uso de funciones anónimas :
$functions = array(
''function1'' => function($echo) {
echo $echo;
}
);
Todos estos métodos se enumeran en la documentación bajo el pseudo-tipo de callback
. Cualquiera que elija, la forma recomendada de llamar a su función sería con la función call_user_func
o call_user_func_array
.
call_user_func($functions[''function1''], ''Hello world!'');
Para realizar un seguimiento de la publicación de Alex Barrett, create_function () devuelve un valor que puede usar para llamar a la función, por lo tanto:
$function = create_function(''$echo'', ''echo $echo;'' );
$function(''hello world'');