2013-05-06 8 views
5

La prima volta che sto cercando di utilizzare la dinamica create_function, e fino ad ora, non molto successo :-)Php - create_function comprensione() - passando semplice variabile

La mia funzione è questa:

function o99_brsa_custom_widgets() { 
     global $wp_meta_boxes; 
     global $o99_brsa_options; 

     for($i=0; $i> count($o99_brsa_options[content]); $i++) { 

      $widgt_id = 'o99_dashboard_widget_dyn' . $i; 
      $widgt_name = 'obmek99 widget name' . $i; 
      $out = $o99_brsa_options[content][$i]; 
      $f = create_function(' $out ',' global $out; echo $out;'); 
      do_the_widgets($widgt_id, $widgt_name, $f); 
     } 
    } 

L'azione do_the_widgets() accetta solo un eco diretto e stampa il contenuto del widget.

Il $o99_brsa_options[content] è un array verificato con elementi $i (ciascuno è contenuto).

La cosa strana è che il $i sta lavorando sulla $widgt_id e $widgt_name ma sul create_function() ottengo lo stesso valore stampato in tutti i widget. (echo $out)

Sembra che io non so come passare una variabile semplice alla nuova funzione (sto usando create_function all'interno globale(), ma aiuta poco quanto per ora.

Quindi, qual è il mio errore/incomprensione/abuso ora :-) ??

+0

Se '$ out' sarà globale, cosa lo passi come argomento? – prodigitalson

+0

Perché in qualche modo, se non lo faccio, non viene stampato nulla .. –

+1

Bene se stai per usarlo come globale, il suo valore sarebbe già configurato al di fuori della funzione, e quindi lo modificheresti all'interno (o meno) e quello la modifica si applicherebbe globalmente non solo all'interno. Se hai solo bisogno di passare un argomento, allora rimuovi il globale. Se avete bisogno di fare entrambi modificare il nome dell'argomento e quindi modificarlo '$ out' all'interno della funzione. Esempio: 'create_function ('$ arg', 'global $ out; echo $ out. $ Arg;');' – prodigitalson

risposta

19

create_function è stato durante la stone age, quando kaᵠ used pen and paper to write applications, quando PeeHaa埽 got a beer perché ha scritto hello would, il mondo sta meglio ora utilizzare per favore closures

$f = function ($out) { 
    echo $out; 
}; 

$f("Welcome"); 

Tu mi ringraziare un giorno, ma è possibile utilizzare solo create_function se si sono Gordon (la macchina del passato mandato qui a tormentarci) ha scritto questo

$fn = create_function(
    '$x', 
    'return $x; } $foo = 42; function foo($int) { return $int; ' 
); 

See Live Demo

+1

:-) Ti ringrazio già ora :-). ma cosa fare se ho bisogno di supporto per PHP 5.2.9? –

+0

avrai bisogno di> = 5.3 ... – smassey

+1

Scopri quanti bug ci sono in 'PHP 5.2.9'? Penso che dovresti fare l'upgrade subito ... perché se ti capita di lavorare più problemi seguiranno – Baba