2012-03-03 20 views
5

Quiero tener una función escrita en PHP que pueda crear funciones anónimas que ~ 5 parámetros y devolverlas para que pueda almacenarlas en una matriz clave/valor y llamarlas más tarde sin ningún conocimiento sobre los parámetros dados y mas de una vez.Devolver funciones anónimas

E.g.

$fun(); 

¿Cómo consigo la devolución y la llamada reutilizable después?

Gracias de antemano.

+0

se refiere a una función estática o función dinámica? esto podría ayudar a http://php.net/manual/en/function.create-function.php –

+0

necesita cerrar PHP5.3 –

+0

Sí. Me divierto como $ fun = function ($ p1, $ p2, $ p3 ..) { cosas mágicas; }; Y quiero deshacerme de la llamada con $ fun ("foo", "bar", "bazz"); así que quiero una función para crear funciones como en Erlang que puedo llamar con $ short(); – reindeer

Respuesta

11

¿Quiere decir algo como esto?

<?php 
function setData($user, $pass, $host){ 
    return function() use ($user, $pass, $host){ 
    return array($user, $pass, $host); 
    }; 
} 

//set the data once 
$container = setData('test', 'password', 'localhost'); 
//use the function without passing the data again (and it should be noted, you 
//can't set the data again) 
var_dump($container()); 

Y la salida:

 
array(3) { 
    [0]=> 
    string(4) "test" 
    [1]=> 
    string(8) "password" 
    [2]=> 
    string(9) "localhost" 
} 

No está seguro de su caso de uso, pero para mi ejemplo la salida de la función podría ser un DNS con formato, así como las matrices simples.

Como se mencionó en otro lugar, func_get_args haría que esto funcionara con cualquier número de argumentos.

+0

¡Creo que es eso y phpunit dice que también funciona! Gracias por la respuesta rápida y adecuada;) – reindeer

+0

¿Se puede ejecutar la función anónima sin guardarla en una variable? es decir 'setData ('test', 'password', 'localhost')()'? – tgun926

2

Tome un vistazo a http://php.net/manual/en/functions.anonymous.php

$greet = function($name) 
{ 
    printf("Hello %s\r\n", $name); 
}; 

$greet('World'); 
$greet('PHP'); 

La variable $greet podría ser devuelto por otra función si es necesario.

La otra cosa que podría necesitar es func_get_args() para leer la lista de argumentos arbitrarios.

Cuestiones relacionadas