2012-09-05 22 views
5

Algunas veces, al inicializar variables, desea pasarles valores que son demasiado complejos para computarlos en un solo comando, por lo que normalmente calcula una variable ficticia antes y luego pasa su valor , o definir una función en otro lugar, y pasar su valor de retorno a nuestra variable.php computar una variable sobre la marcha usando funciones anónimas

Mi pregunta (deseo) es, ¿es posible calcular a una variable sobre la marcha utilizando funciones anónimas?

por ejemplo, en lugar de usar este otro:

$post = get_post(); 
$id = $post->ID; 

$array = array(
    'foo' => 'hi!', 
    'bar' => $id 
); 

Vamos a usar algo como esto:

$array = array(
    'foo' => 'hi!', 
    'bar' => (function(){ 
     $post = get_post(); 
     return $post->ID; 
    }) 
); 

Código es totalmente aleatorio.

+2

¿Lo intentó? – PeeHaa

+1

"El código es totalmente aleatorio". una combinación muy improbable de letras proveniente de cualquier tipo de generación aleatoria –

+0

@PeeHaa sí, devuelve Closure :: __ set_state (array ( )) ya que los cierres son instancias de la clase Closure. – Bakaburg

Respuesta

1

En su ejemplo, lo siguiente sería hacer muy bien:

$array = array('foo'=>'hi!','bar'=>(get_post()->ID)); 

Sin embargo, con la consideración a su pregunta es un poco más abierto terminado y no es específica para el fragmento de código, es posible que este stackoverflow answer acceptable.

$a = array('foo' => call_user_func(
    function(){ 
     $b = 5; 
     return $b; 
    }) 
); 
var_dump($a); 
+0

¡eso es todo! – Bakaburg

+0

pregunta de un lado: ¿por qué pones $ antes de ID en (get_post() -> $ ID)? y los paréntesis son necesarios? – Bakaburg

+1

@Bakaburg mi mal en el $ antes de la identificación, he actualizado la publicación con la sintaxis adecuada. también es probable que los parens no sean necesarios, simplemente no probé mi código y estaba jugando a lo seguro :) – zamnuts

Cuestiones relacionadas