Utilizar una variable para definir una función de PHP

Me gustaría dinámicamente el nombre de un par de funciones uso de variables, como este:

$thing = 'some_function';

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

Sé que puedo llamada una función con una variable como esta:

$something = 'function_exists';

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

Pero la parte superior ejemplo no funciona para mí.

Alguna idea?

Estoy usando un sistema que tiene los módulos. Cada módulo es un simple script php que puede ser añadido o quitado de en una carpeta específica.

Cada módulo necesita una nueva función para inicializar la misma. Estoy glob ing para los nombres de archivo, entonces quiero bucle y crear una serie de funciones, una para cada módulo.

Estoy usando un sistema existente y no se puede reescribir el módulo de manejo.

La alternativa sería escribir todas las funciones de inicialización y duro código de ellos, pero la lista crece también lo hace el código – y si un módulo es llevado por los errores son lanzados.

  • php.net/manual/en/function.call-user-func.php comprobar que fuera
  • Su primer código es correcto. Pero usted debe pensar dos veces antes de usar esta función. Y, a continuación, decidir no utilizarlo.
  • Excepto que esta no sería útil. Usted puede ver que la función es estático, todo el tiempo – usted no puede hacer la función de actuar de manera diferente esta manera. Lo que esta función será llamada, esta función va a actuar de la misma manera, no importa qué. Es como hacer hello() función, excepto un nombre diferente dependiendo de cómo usted como usuario :P. Para tal función, usted probablemente tendrían acceso mediante $thing(), lo que es inútil. Sólo el nombre de la función con normalidad.
  • Atención a comentar sobre las razones por las que no debería hacer esto?
  • Hice un comentario sobre tu pregunta principal. Muestra algunas de las razones de por qué no.
  • Tal vez usted podría explicar por qué usted está tratando de crear dinámicamente las funciones estáticas? Esto no parece una idea muy buena, en general. Tal vez, si se le explica el problema que están tratando de resolver, la gente puede sugerir una mejor solución.
  • añade más detalles a la Q ahora…

InformationsquelleAutor Mick | 2011-08-27

1 Kommentar

  1. 18

    Lo que puedes hacer es

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

    En php < 5.3, tendrás que utilizar create_function en lugar de la función anónima:

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

    Que se dice, la definición de funciones con la dinámica de los nombres es una mala idea. En su lugar, cree una matriz de funciones que se llaman a, o uso de polimorfismo.

    • Me gustaría apoyar <5.3, lo que significa que create_function. Pero que las fuerzas de la función de los nombres de «lambda_1», «lambda_2», etc. Necesito llamar más tarde a estas funciones mediante una cadena específica.
    • No, create_function no tiene nada que ver con la nomenclatura parte. Se añadió un ejemplo para php<5.3 la respuesta. ¿Por qué no almacenar las funciones en una matriz?
    • Porque no sé qué todo de ellos antes de tiempo. He ido con sus ejemplos que funcionan muy bien. Hay no haber cientos de estas funciones, a tan sólo 10 o así, pero no tengo control total sobre lo que estos nombres serán. Gracias

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea