2011-08-27 14 views
18

me gustaría nombrar unas pocas funciones dinámicamente el uso de variables, como esto:utilizar una variable para definir una función PHP

$thing = 'some_function'; 

function $thing() { 
    echo 'hi!'; 
} 

sé que puedo llamada de una función utilizando una variable de la siguiente manera:

$something = 'function_exists'; 

if($something('print_r')) { 
    echo 'Yep'; 
} 

Pero el mejor ejemplo no funciona para mí.

¿Alguna idea?

Estoy usando un sistema que tiene módulos. Cada módulo es un solo script php que se puede agregar o quitar de una carpeta específica.

Cada módulo necesita una nueva función para inicializar la misma. Estoy buscando los nombres de los archivos, luego quiero crear un ciclo y crear una serie de funciones, una para cada módulo.

estoy usando un sistema existente y no puedo reescribir el manejo del módulo.

La alternativa sería simplemente escribir todas las funciones init y codificarlas, pero a medida que la lista crece, también lo hace el código, y si se elimina un módulo, se producen errores.

+1

http://php.net/manual/en/function.call-user-func.php comprobar que fuera – Sleeperson

+0

Excepto esto no sería útil. Verás, esa función es estática todo el tiempo; no puedes hacer que la función actúe de manera diferente de esta manera. Cualquiera que sea el nombre de esta función, esta función actuará de la misma manera pase lo que pase. Es como hacer que la función 'hello()', excepto nombrada de manera diferente, dependa de cómo te guste el usuario: P. Para tal función, probablemente accedería usando '$ thing()', lo que lo haría inútil. Simplemente nombra la función normalmente. – xfix

+0

¿Quizás podría explicar por qué está tratando de crear dinámicamente funciones estáticas? Esto no parece una muy buena idea, en términos generales. Tal vez, si explica el problema que está tratando de resolver, las personas pueden sugerirle una mejor solución. –

Respuesta

18

Lo que puede hacer es

$thing = 'some_function'; 
$$thing = function() { 
    echo 'hi'; 
}; 
$some_function(); 

en PHP < 5.3, que tendrá que utilizar create_function en lugar de los anonymous function:

// Use this in < 5.3 
$thing = 'some_function'; 
$$thing = create_function('', 
    'echo "hi";' 
); 
$some_function(); 

Dicho esto, las funciones que definen con nombres dinámicos es una mala idea. En su lugar, cree una serie de funciones a las que llama o use polimorfismo.

+1

más rápido en el oeste :) – Mick

+0

me gustaría apoyar a <5,3, lo que significa create_function. Pero eso obliga a los nombres de las funciones a ser "lambda_1", "lambda_2", etc. Tengo que llamar más tarde estas funciones por una cadena específica. – Mick

+0

@Mick No, 'create_function' no tiene nada que ver con la parte de nombres. Se agregó un ejemplo para php <5.3 a la respuesta. ¿Por qué no almacena las funciones en una matriz? – phihag

Cuestiones relacionadas