2011-08-27 14 views
18

vorrei citarne dinamicamente alcune funzioni usando le variabili, in questo modo:Utilizzare una variabile per definire una funzione PHP

$thing = 'some_function'; 

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

So che posso chiamata una funzione utilizzando una variabile in questo modo:

$something = 'function_exists'; 

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

Ma l'esempio principale non funziona per me.

Qualche idea?

Sto utilizzando un sistema con moduli. Ogni modulo è un singolo script php che può essere aggiunto o rimosso da una cartella specifica.

Ogni modulo ha bisogno di una nuova funzione per inizializzarlo. Sto globing per i nomi dei file, quindi voglio fare un ciclo e creare una serie di funzioni, una per ogni modulo.

Sto utilizzando un sistema esistente e non posso riscrivere la gestione del modulo.

L'alternativa sarebbe semplicemente scrivere tutte le funzioni di init e codificarle con il codice, ma man mano che l'elenco cresce, così il codice - e se un modulo viene tolto vengono lanciati degli errori.

+1

http://php.net/manual/en/function.call-user-func.php check out – Sleeperson

+0

Tranne che questo non sarebbe utile. Vedete, quella funzione è statica per tutto il tempo - non potete fare in modo che la funzione agisca diversamente in questo modo. Qualunque sia la denominazione di questa funzione, questa funzione agirà allo stesso modo indipendentemente da cosa. È come fare la funzione 'hello()', eccetto il nome diverso a seconda di come ti piace utente: P. A tale funzione probabilmente accederai con '$ thing()', rendendolo inutile. Basta nominare la funzione normalmente. – xfix

+0

Forse potresti spiegare perché stai provando a creare dinamicamente funzioni statiche? Questa non sembra una buona idea, in generale. Forse, se spieghi il problema che stai cercando di risolvere, le persone potrebbero suggerirti una soluzione migliore. –

risposta

18

Che cosa si può fare è

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

in PHP < 5.3, dovrete usare create_function posto dei anonymous function:

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

Detto questo, le funzioni che definiscono con nomi dinamici è una cattiva idea. Invece, crea una serie di funzioni alle quali fai call o usa il polimorfismo.

+1

pistola più veloce in occidente :) – Mick

+0

Vorrei supportare <5.3, quindi ciò significa create_function. Ma questo costringe i nomi delle funzioni ad essere "lambda_1", "lambda_2" ecc. Ho bisogno di chiamare più tardi queste funzioni con una stringa specifica. – Mick

+0

@Mick No, 'create_function' non ha nulla a che fare con la parte di denominazione. Aggiunto un esempio per php <5.3 alla risposta. Perché non memorizzi le funzioni in un array? – phihag

Problemi correlati