2008-09-13 17 views
9

Sé que en php puede incrustar las variables dentro de las variables, como:En PHP es posible el uso de una función dentro de una variable

<? $var1 = "I\'m including {$var2} in this variable.."; ?> 

pero me preguntaba cómo, y si era posible incluir una función dentro de una variable. Sé que solo podría escribir:

<?php 
$var1 = "I\'m including "; 
$var1 .= somefunc(); 
$var1 = " in this variable.."; 
?> 

Pero lo que si tengo una variable de largo para la salida, y yo no quiero hacer esto cada vez, o quiero usar múltiples funciones:

<?php 
$var1 = <<<EOF 
    <html lang="en"> 
     <head> 
      <title>AAAHHHHH</title> 
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
     </head> 
     <body> 
      There is <b>alot</b> of text and html here... but I want some <i>functions</i>! 
      -somefunc() doesn't work 
      -{somefunc()} doesn't work 
      -$somefunc() and {$somefunc()} doesn't work of course because a function needs to be a string 
      -more non-working: ${somefunc()} 
     </body> 
    </html> 
EOF; 
?> 

O quiero cambios dinámicos en que la carga de código:

<? 
function somefunc($stuff) { 
    $output = "my bold text <b>{$stuff}</b>."; 
    return $output; 
} 

$var1 = <<<EOF 
    <html lang="en"> 
     <head> 
      <title>AAAHHHHH</title> 
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
     </head> 
     <body> 
      somefunc("is awesome!") 
      somefunc("is actually not so awesome..") 
      because somefunc("won\'t work due to my problem.") 
     </body> 
    </html> 
EOF; 
?> 

bien?

+1

¿Por qué se está escapando una sola cita dentro de comillas dobles? ;) – Till

Respuesta

25

Las llamadas a funciones dentro de cadenas son soportados, ya PHP5 por tener una variable que contiene el nombre de la función a llamar:

<? 
function somefunc($stuff) 
{ 
    $output = "<b>{$stuff}</b>"; 
    return $output; 
} 
$somefunc='somefunc'; 
echo "foo {$somefunc("bar")} baz"; 
?> 

es la salida "foo <b>bar</b> baz".

Me resulta sin embargo más fácil (y esto funciona en PHP4) o bien llame a la función fuera de la cadena:

<? 
echo "foo " . somefunc("bar") . " baz"; 
?> 

o asignar a una variable temporal:

<? 
$bar = somefunc("bar"); 
echo "foo {$bar} baz"; 
?> 
+4

Supongo que funciona, pero nunca haría eso. Está gritando una mala práctica. Piense en la legibilidad del código, etc. Regrese a su código en seis meses y descubra todas las llamadas a funciones dentro de su marcado HTML. – Till

+0

Nunca debe llamar a una función dentro de su vista de todos modos excepto para funciones de escape como htmlspecialchars (que es un nombre de función demasiado largo para su propósito, le jodan, PHP) ... –

+0

No solo es más fácil, sino limpio y legible. – gd1

2

"bla bla bla".function("blub")." and on it goes"

-1

Expandiendo un poco en lo que Jason W dijo:

 
I find it easier however (and this works in PHP4) to either just call the 
function outside of the string: 

<? 
echo "foo " . somefunc("bar") . " baz"; 
?> 

También se puede simplemente incrustar esta llamada de función directamente en su html, como:

<? 

function get_date() { 
    $date = `date`; 
    return $date; 
} 

function page_title() { 
    $title = "Today's date is: ". get_date() ."!"; 
    echo "$title"; 
} 

function page_body() { 
    $body = "Hello"; 
    $body = ", World!"; 
    $body = "\n
\n"; $body = "Today is: " . get_date() . "\n"; } ?> <html> <head> <title><? page_title(); ?></title> </head> <body> <? page_body(); ?> </body> </html>
+1

ejemplo asume que tiene etiquetas cortas habilitadas –

+0

También creo que quiere decir $ body. = ", World!"; (punto antes de igual). En caso de que alguien copie/pegue su ejemplo ... – Don

+0

La función page_title se hace eco de algo, por lo que no funcionaría con etiquetas cortas. // La función page_body no devuelve nada por lo que no haría nada con las etiquetas cortas habilitadas. // Además, incluso si devuelve algo, xaddict

Cuestiones relacionadas