2008-09-13 15 views
9

Wiem w php można osadzić zmiennych wewnątrz zmiennych, takich jak:W PHP jest możliwe użycie funkcji wewnątrz zmiennej

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

Ale zastanawiałem się, w jaki sposób, a jeśli to było możliwe włączenie funkcji wewnątrz zmiennej. wiem, może po prostu napisać:

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

Ale co, jeśli mam długą zmienną do wyjścia, a ja nie chcę robić to za każdym razem, czy chcę korzystać z wielu funkcji:

<?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; 
?> 

Albo chcę dynamicznych zmian w tym obciążeniu kod:

<? 
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; 
?> 

również? wzywa

+1

Dlaczego unikacie pojedynczego cudzysłowu wewnątrz podwójnych cytatów? ;) – Till

Odpowiedz

25

Funkcja w ramach ciągi są obsługiwane od PHP5 poprzez zmienną zawierającą nazwę funkcji zadzwonić:

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

wyjście wola „foo <b>bar</b> baz”.

I łatwiej jednak (i ​​to działa w PHP4) albo po prostu wywołać funkcję poza ciągiem:

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

lub przypisać do zmiennej tymczasowej:

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

Myślę, że to działa, ale nigdy bym tego nie zrobił. To krzyczy zła praktyka. Pomyśl o czytelności kodu itp. Wróć do kodu w ciągu sześciu miesięcy i sprawdź wszystkie wywołania funkcji w twoim znaczniku HTML. – Till

+0

W żadnym wypadku nie powinieneś wywoływać funkcji wewnątrz twojego widoku, z wyjątkiem funkcji wychodzących, takich jak htmlspecialchars (co jest zbyt długą nazwą funkcji, która ma na celu, wkręć cię, PHP) ... –

+0

Nie tylko łatwiejsze, ale również staranne i czytelne. – gd1

2

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

-1

Poszerzenie tego, co powiedział Jason W:

 
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"; 
?> 

Można też po prostu umieścić to wywołanie funkcji bezpośrednio w kodzie HTML, jak:

<? 

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

Przykład zakłada, że ​​masz włączone krótkie tagi. –

+0

Też myślę, że masz na myśli $ body. = ", Świat!"; (kropka przed równa). Na wypadek, gdyby ktoś skopiował/wkleił twój przykład ... – Don

+0

Funkcja page_title powtarza coś, więc nie działa z krótkimi tagami. // Funkcja page_body nic nie zwraca, więc nie działałaby z włączonymi krótkimi tagami. // Co więcej, nawet jeśli coś by zwróciło, xaddict

Powiązane problemy