ej .:¿Se puede almacenar una función en una matriz de PHP?
$functions = array(
'function1' => function($echo) { echo $echo; }
);
Es esto posible? ¿Cuál es la mejor alternativa?
ej .:¿Se puede almacenar una función en una matriz de PHP?
$functions = array(
'function1' => function($echo) { echo $echo; }
);
Es esto posible? ¿Cuál es la mejor alternativa?
Hay algunas opciones. Utilice create_function
:
$functions = array(
'function1' => create_function('$echo', 'echo $echo;')
);
almacenar simplemente el nombre de la función como una cadena (esto es, efectivamente, todo create_function
está haciendo):
function do_echo($echo) {
echo $echo;
}
$functions = array(
'function1' => 'do_echo'
);
Si está usando PHP 5.3 se puede hacer uso de anonymous functions:
$functions = array(
'function1' => function($echo) {
echo $echo;
}
);
Todos estos métodos se enumeran en la documentación bajo callback
pseudo-type. 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 dar seguimiento a cargo de Alex Barrett, create_function() devuelve un valor que en realidad se puede utilizar para llamar a la función, así:
$function = create_function('$echo', 'echo $echo;');
$function('hello world');
A partir de PHP "5.3.0 Las funciones anónimas que se disponga ", ejemplo de uso:
nota que esto es mucho más rápido que usar edad 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
de prueba para exigible: http://cz2.php.net/is_callable
vienes Javascript? –
** TL; DR - desde PHP 5.4: ** '$ functions = ['function1' => function ($ echo) {echo $ echo; }]; ' ...... ya que PHP 5.3 funciones anónimas están disponibles, desde 5.4 puede escribir' [] 'en lugar de' matriz() ' –