2009-02-09 6 views
48

Ich habe eine PHP-Funktion, die ich verwende, um einen Standard-HTML-Block auszugeben. Es sieht im Moment so aus:Gibt es eine Möglichkeit, HTML in einer PHP-Funktion zurückzugeben? (ohne den Rückgabewert als String zu erstellen)

<?php function TestBlockHTML ($replStr) { ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php } ?> 

Ich möchte das HTML innerhalb der Funktion (anstatt Echo) zurückgeben. Gibt es eine Möglichkeit, dies zu tun, ohne den HTML-Code (oben) in einer Zeichenfolge zu erstellen?

Antwort

71

Sie können eine heredoc verwenden, die variable Interpolation unterstützt, ist es ziemlich ordentlich aussehen zu lassen:

function TestBlockHTML ($replStr) { 
return <<<HTML 
    <html> 
    <body><h1>{$replStr}</h1> 
    </body> 
    </html> 
HTML; 
} 

Achten Sie jedoch genau auf die Warnung im Handbuch - die Abschlusszeile darf keine Leerzeichen enthalten und kann daher nicht eingerückt werden.

+2

Auch der <<< HTML heredoc-Bezeichner darf nicht eingerückt sein, dh wenn er nicht etwas wie "return" davor hat. –

+10

Es kann beliebig eingerückt werden, sollte aber direkt nach dem Bezeichner einen Zeilenumbruch haben. –

+0

Sie können Klammern vermeiden, wenn die var nicht in ein Array ist:

$ replStr

oder

{$ array [ 'var]}

WalterV

54

Ja, es gibt: Sie können erfassen die echo Text ed mit ob_start:

<?php function TestBlockHTML ($replStr) { ob_start(); ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php 
    return ob_get_clean(); 
} ?> 
+0

Genau diese Art und Weise Syntax Wörter hervorgehoben und Schlüssel sind so gefärbt, als wären sie normaler HTML-Code, abgesehen davon, dass sie in einer Zeichenfolge enthalten sind. Definitiv eine bessere Antwort für die Wartbarkeit, die immer an erster Stelle stehen sollte –

+0

Warum würden Sie den Ausgabepuffer verwenden, wenn das gut zu funktionieren scheint? ' \t

\t

Lorem ipsum dolar

' – Joren

+1

@Joren Weil das explizit ist, was das OP nicht will. –

5

Erstellen Sie eine Vorlagendatei und verwenden Sie eine Vorlagen-Engine zum Lesen/Aktualisieren der Datei. Es wird die Wartbarkeit Ihres Codes in Zukunft erhöhen sowie die Anzeige von der Logik trennen.

Ein Beispiel Smarty mit:

Vorlagendatei

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>{$title}</title></head> 
<body>{$string}</body> 
</html> 

-Code

function TestBlockHTML(){ 
    $smarty = new Smarty(); 
    $smarty->assign('title', 'My Title'); 
    $smarty->assign('string', $replStr); 
    return $smarty->render('template.tpl'); 
} 
14

Dies kann eine skizzenhafte Lösung sein, und ich würde jemand schätzen Hinweis darauf, ob Das ist eine schlechte Idee, da es keine Standardfunktion ist. Ich habe einen gewissen Erfolg hatte immer HTML aus einer PHP-Funktion ohne den Aufbau der Rückgabewert als String mit den folgenden:

function noStrings() { 
    echo ''?> 
     <div>[Whatever HTML you want]</div> 
    <?php; 
} 

Der Gerechte ‚Anruf‘ die Funktion:

noStrings(); 

Und es wird Ausgabe:

<div>[Whatever HTML you want]</div> 

Mit dieser Methode können Sie auch PHP-Variablen innerhalb der Funktion definieren und sie innerhalb des HTML aussprechen.

+0

/mindblown können Sie erklären, warum dies funktioniert, wenn alles andere versagt? –

+2

das funktioniert gut ohne 'echo', nur'?> Html vladkras

2

Ein anderer Weg ist zu tun ist, file_get_contents() zu verwenden und eine Vorlage in HTML-Seite haben

Vorlagen-Seite

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>$title</title></head> 
<body>$content</body> 
</html> 

PHP Funktion

function YOURFUNCTIONNAME($url){ 

$html_string = file_get_contents($url); 
return $html_string; 

}