2008-09-13 9 views
9

ich in PHP kennen verwenden Sie Variablen innerhalb von Variablen einbetten können, wie:In PHP ist es möglich, eine Funktion innerhalb einer Variablen

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

Aber ich frage mich, wie und ob es möglich war, eine Funktion schließen innerhalb einer Variablen. Ich weiß, ich könnte nur schreiben:

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

Aber was, wenn ich eine lange Variable für die Ausgabe, und ich möchte nicht diese jedes Mal tun, oder ich will mehrere Funktionen verwenden:

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

Oder ich möchte dynamische Änderungen in dieser Last von Code:

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

Nun?

+1

Warum entkommst du ein einzelnes Zitat in Anführungszeichen? ;) – Till

Antwort

25

Funktionsaufrufe innerhalb von Strings seit PHP5 unterstützt werden durch eine Variable, die den Namen der Funktion enthält, zu nennen:

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

gibt „foo <b>bar</b> baz“.

Ich finde es jedoch einfacher (und dies in PHP4 arbeitet) entweder nur die Funktion außerhalb des Strings nennen:

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

oder zuordnen zu einer temporären Variablen:

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

Ich denke, das funktioniert, aber ich würde das nie tun. Es ist schreiende schlechte Praxis. Denken Sie an Code-Lesbarkeit etc .. Kommen Sie zurück zu Ihrem Code in sechs Monaten und herauszufinden, alle Funktionsaufrufe in Ihrem HTML-Markup. – Till

+0

Sie sollten niemals eine Funktion in Ihrer Ansicht aufrufen, außer für fliehende Funktionen wie htmlspecialchars (das ist ein viel zu langer Funktionsname für den Zweck, schrauben Sie, PHP) ... –

+0

Nicht nur einfacher, aber ordentlich und lesbar. – gd1

2

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

-1

Erweitern ein bisschen auf, was Jason W sagte:

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

Du kannst auch nur diesen Funktionsaufruf direkt in Ihrem html, wie:

<? 

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

Beispiel nimmt an, dass Sie kurze Tags aktiviert haben –

+0

Ich denke auch, Sie meinen $ Körper. = ", Welt!"; (Punkt vor Gleichem). Nur für den Fall, dass jemand Ihr Beispiel kopiert/einfügt ... – Don

+0

Die Funktion page_title gibt etwas zurück, das mit kurzen Tags nicht funktioniert. // Die Funktion page_body gibt nichts zurück, so dass bei aktivierten Short-Tags nichts passiert. // Auch wenn es etwas zurückgeben würde, xaddict

Verwandte Themen