2012-05-25 7 views
10

Interpolazione variabile di supporto PHP in stringhe con doppie virgolette, ad es.stringa interpolatrice PHP per l'uscita di funzione

$s = "foo $bar"; 

ma è possibile interpolare i risultati chiamata di funzione nella stringa doppia citato?

ad es.

$s = "foo {bar()}"; 

Qualcosa del genere? Sembra impossibile, vero?

+2

sì non è possibile. Puoi ottenere la tua risposta semplicemente provando – Ibu

+0

Intendevi * interpolare * o * interpretare *? – hakre

risposta

2

La funzione di doppia quota in PHP non valuta il codice PHP, sostituisce semplicemente le variabili con i relativi valori. Se si desidera valutare effettivamente il codice PHP in modo dinamico (molto pericoloso), si dovrebbe usare eval:

eval("function foo() { bar() }"); 

Oppure, se si desidera solo per creare una funzione:

$foo = create_function("", "bar()"); 
$foo(); 

utilizzarla solo se c'è davvero nessuna altra opzione.

+1

Se la funzione si trovava all'interno di una classe, puoi riferirla all'interno di una stringa, ad es .: '$ s =" foo {$ this-> bar()} ";' – nawfal

14

È assolutamente possibile utilizzare la tecnica di chiamata nome stringa-funzione come indica la risposta di Overv. In molti casi di sostituzione banale si legge molto meglio di quanto le sintassi alternative come

"<input value='<?php echo 1 + 1 + foo()/bar(); ?>' />" 

Hai bisogno di una variabile, perché il parser si aspetta che il $ di essere lì. È qui che la trasformazione dell'identità funziona bene come un attacco sintattico. Basta dichiarare un funzione identità, e assegnare il nome ad una variabile in ambito:

function identity($arg){return $arg;} 
$interpolate="identity"; 

Poi si può passare qualsiasi espressione PHP valida come argomento di funzione:

"<input value='{$interpolate(1 + 1 + foo()/bar())}' />" 

Il vantaggio è che si può eliminare un sacco di variabili locali banali e dichiarazioni di eco.

Lo svantaggio è che la variabile $ interpolate non rientra nello scope, quindi è necessario dichiararla ripetutamente all'interno di funzioni e metodi.