2012-05-25 15 views
10

Interpolación de variables de soporte PHP en cadenas entre comillas dobles, p. Ej.Cadena de interpolación de PHP para salida de función

$s = "foo $bar"; 

Pero, ¿es posible interpolar los resultados de la función de llamada en la cadena entre comillas dobles?

p. Ej.

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

Algo así? Parece que no es posible ¿no?

+2

sí que no es posible. Puede obtener su respuesta simplemente intentándolo – Ibu

+0

¿Quiso decir * interpolación * o * interpretación *? – hakre

Respuesta

2

La función de comillas dobles en PHP no evalúa el código PHP, simplemente reemplaza las variables con sus valores. Si desea evaluar realmente el código PHP dinámicamente (muy peligroso), se debe utilizar eval:

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

O si lo que desea es crear una función:

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

Sólo debe utilizarse si realmente hay ninguna otra opción

+1

Si la función estaba dentro de una clase, puede referirla dentro de una cadena, por ejemplo: '$ s =" foo {$ this-> bar()} ";' – nawfal

14

Es absolutamente posible utilizar la técnica de llamada de cadena a nombre de función como lo indica la respuesta de Overv. En muchos casos de sustitución trivial que lee mucho mejor que las sintaxis alternativas tales como

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

Es necesario una variable, porque el analizador espera que el $ para estar allí. Aquí es donde la tranforma de identidad funciona bien como un truco sintáctico. Sólo declarar una función identidad, y asignar el nombre de una variable en su alcance:

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

entonces puede pasar cualquier expresión válida de PHP como la función argumento:

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

La ventaja es que se puede eliminar MUCHAS variables locales triviales y declaraciones de eco.

El inconveniente es que la variable $ interpolate cae fuera del alcance, por lo que tendría que declararlo repetidamente como global dentro de las funciones y métodos.

Cuestiones relacionadas