2011-12-18 20 views
9

Tengo una variable como $string = "blah";¿Cómo puedo crear una función de forma dinámica?

¿Cómo puedo crear una función que tenga el valor de la variable como nombre? ¿Es esto posible en PHP?

Como function $string($args){ ... } o algo así, y ser capaz de llamar así:

blah($args); 
+0

¿Está buscando funciones anónimas [] (http://php.net/manual/en/functions.anonymous.php)? – Indranil

+6

horrible idea. ¿Qué estás * realmente * tratando de hacer? –

+0

no no, necesito que el nombre esté disponible a través del mismo código :) – Alex

Respuesta

9

Eso no suena como una gran opción de diseño, podría valer la pena repensar, pero ...

Si está usando PHP 5.3 se puede utilizar una función anónima.

<?php 
$functionName = "doStuff"; 
$$functionName = function($args) { 
    // Do stuff 
}; 

$args = array(); 
$doStuff($args); 
?> 
+2

Técnicamente, esto no define una función, sino un cierre.Pruebe 'get_defined_functions() ['user']' y 'get_defined_vars()' para ver la diferencia. – jameshfisher

+0

@jameshfisher Los "cierres" de PHP también se conocen como [funciones *** anónimas ***] (http://php.net/manual/en/functions.anonymous.php), y la palabra clave 'función' se usa en la sintaxis Claro, esto no define una * función nombrada *, pero creo que va más allá de la pedantería hasta el punto de irracionalidad para decir que no define una 'función' en absoluto. –

+0

@MarkAmery Las "funciones" y "vars" de PHP se encuentran en diferentes espacios de nombres. Ellos son fundamentalmente diferentes. Este es un problema semántico, no sintáctico. – jameshfisher

10

esto podría no ser una buena idea, pero se puede hacer algo como esto:

$string = "blah"; 
$args = "args" 
$string = 'function ' . $string . "({$args}) { ... }"; 
eval($string); 
+11

¡No! Simplemente no! :) – PeeHaa

+0

hmm interesante, esto debería funcionar, no pensé en eso: D – Alex

+4

Esta debería ser la respuesta aceptada. Esta es la única solución aquí que define una función, no un cierre. Pruebe 'get_defined_functions() ['user']' y 'get_defined_vars()' para ver la diferencia. – jameshfisher

1

Puede llamar una función por su nombre almacenada en una variable, y también puede asignarle una función a las variables y llamarla usando la variable. Si no es lo que quieres, explica más.

+2

Esta respuesta hubiera sido genial como comentario :) – PeeHaa

Cuestiones relacionadas