web-dev-qa-db-de.com

PHP Echo eines großen Textblocks

Ich bin neu in PHP und ich kann nicht herausfinden, welche Regeln für die Verwendung der Echo-Funktion gelten. Wenn ich zum Beispiel einen großen Block von css/js echo muss, muss ich jeder Textzeile ein Echo hinzufügen, oder gibt es eine Möglichkeit, einen großen Codeblock mit einem einzigen Echo zu wiederholen?

Wenn ich versuche, einen großen Codeblock wie diesen zu wiederholen, erhalte ich eine Fehlermeldung: 

if (is_single()) {
echo '<link type="text/css" rel="stylesheet" href="http://jotform.com/css/styles/form.css"/><style type="text/css"> 
.form-label{
width:150px !important;
}
.form-label-left{
width:150px !important;
}
.form-line{
padding:10px;
}
.form-label-right{
width:150px !important;
}
body, html{
margin:0;
padding:0;
background:false;
}

.form-all{
margin:0px auto;
padding-top:20px;
width:650px !important;
color:Black;
font-family:Verdana;
font-size:12px;
}
</style> 

<link href="http://jotform.com/css/calendarview.css" rel="stylesheet" type="text/css" /> 
<script src="http://jotform.com/js/prototype.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus-ui.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/jotform.js?v3" type="text/javascript"></script> 
<script src="http://jotform.com/js/location.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/calendarview.js" type="text/javascript"></script> 
<script type="text/javascript"> 

JotForm.init(function(){
$('input_6').hint('ex: [email protected]');
});
</script>';
}else {

}

Gibt es eine bessere Möglichkeit, große Codeblöcke ohne viel Arbeit (z. B. Hinzufügen von Echo zu jeder Zeile) wiederzugeben?

40
Thomas

Eine Möglichkeit ist, aus dem PHP-Block herauszukommen und einfach HTML zu schreiben.

Beenden Sie mit Ihrem Code nach der öffnenden geschweiften Klammer Ihrer if-Anweisung das PHP:

if (is_single()) { ?>

Dann entfernen Sie den echo ' und den ';

Schreiben Sie nach all Ihrer HTML- und CSS-Datei vor dem schließenden }:

<? } else {

Wenn der Text, den Sie auf die Seite schreiben möchten, dynamisch ist, wird er etwas komplizierter, aber für den Moment sollte dies gut funktionieren.

62
hookedonwinter

Heredoc-Syntax kann sehr nützlich sein:

// start the string with 3 <'s and then a Word
// it doesn't have to be any particular string or length
// but it's common to make it in all caps.
echo <<< EOT
    in here is your string
    it has the same variable substitution rules
    as a double quoted string.
    when you end it, put the indicator Word at the
    start of the line (no spaces before it)
    and put a semicolon after it
EOT;
132
nickf

Check out heredoc . Beispiel:

echo <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

echo <<<"FOOBAR"
Hello World!
FOOBAR;

Das ist auch nowdoc , aber innerhalb des Blocks wird keine Analyse durchgeführt. 

echo <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
20
Galen

Das Wiederholen von Text, der Zeilenumbrüche enthält, ist in Ordnung, und es gibt keine Begrenzung für die Menge des Textes oder der Zeilen, die auf einmal ausgegeben werden können (außer für verfügbaren Speicher).

Der Fehler in Ihrem Code wird durch die nicht in Anführungszeichen stehenden einfachen Anführungszeichen in der Zeichenfolge verursacht.

Diese Zeile sehen:

$('input_6').hint('ex: [email protected]');

Sie müssen diese einfachen Anführungszeichen in einer Zeichenfolge PHP schützen, unabhängig davon, ob es sich um eine einzelne Zeile handelt oder nicht.

Es gibt jedoch eine andere gute Methode, um große Strings wiederzugeben, indem Sie den PHP - Block schließen und später wieder öffnen:

if (is_single()) {
  ?>
<link type="text/css" rel="stylesheet" href="http://jotform.com/css/styles/form.css"/><style type="text/css"> 
.form-label{
width:150px !important;
}
.form-label-left{
width:150px !important;
}
.form-line{
padding:10px;
}
.form-label-right{
width:150px !important;
}
body, html{
margin:0;
padding:0;
background:false;
}

.form-all{
margin:0px auto;
padding-top:20px;
width:650px !important;
color:Black;
font-family:Verdana;
font-size:12px;
}
</style> 

<link href="http://jotform.com/css/calendarview.css" rel="stylesheet" type="text/css" /> 
<script src="http://jotform.com/js/prototype.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus-ui.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/jotform.js?v3" type="text/javascript"></script> 
<script src="http://jotform.com/js/location.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/calendarview.js" type="text/javascript"></script> 
<script type="text/javascript"> 

JotForm.init(function(){
$('input_6').hint('ex: [email protected]');
});
</script>
  <?php
}else {

}

Oder eine andere Alternative, die wahrscheinlich besser für die Lesbarkeit ist, besteht darin, den gesamten statischen HTML-Code auf einer anderen Seite zu platzieren und ihn mit include () zu beschreiben.

6
thomasrutter

Man, PHP ist kein Perl!
PHP kann einfach aus HTML entkommen:) http://www.php.net/manual/de/language.basic-syntax.phpmode.php

if (is_single()) {
//now we just close PHP tag
?>
</style> 
<script> 
<blah blah blah>
<?php
//open it back. here is your PHP again. easy!
}
?>

Ich frage mich, warum sich so viele Leute an hässlichen Heredoc halten.

6

Ihr Problem wird tatsächlich verursacht durch:

$('input_6').hint('ex: [email protected]');

Sie müssen die einfachen Anführungszeichen als \' kennzeichnen. 

Allerdings: Die Verwendung eines Heredocs ist eine viel bessere Idee, da sie insgesamt wesentlich sauberer ist.

5
Mitch Dempsey

Um die Antwort von @ hookedonwinter zu erweitern, ist hier eine alternative Syntax (in meinen Augen Reiniger):

<?php if (is_single()): ?>
    <p>This will be shown if "is_single()" is true.</p>
<?php else: ?>
    <p>This will be shown otherwise.</p>
<?php endif; ?>
2
moteutsch

Brechen Sie einfach aus, wo Sie müssen.

<html>
(html code)
<?php
(php code)
?>
(html code)
</html>

Verwenden Sie keine verkürzte Form. <? steht in Konflikt mit XML und ist auf den meisten Servern standardmäßig deaktiviert.

1
user186658
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
0
蔡正海

Ich bevorzuge es, mehrere Strings miteinander zu verketten. Dies funktioniert entweder für Echo UND für Variablen . Auch einige IDEs initialisieren neue Zeilen automatisch, wenn Sie die Eingabetaste drücken. Diese Syntax erzeugt auch eine kleine Ausgabe, da in den Zeichenfolgen weniger Whitespaces vorhanden sind.

echo ''
    .'one {'
    .'    color: red;'
    .'}'
    ;

$foo = ''
    .'<h1>' . $bar . '</h1>'  // insert value of bar
    .$bar                     // insert value of bar again
    ."<p>$bar</p>"            // and again
    ."<p>You can also use Double-Quoted \t Strings for single lines. \n To use Escape Sequences.</p>"
    // also you can insert comments in middle, which aren't in the string.
    .'<p>Or to insert Escape Sequences in middle '."\n".' of a string</p>'
    ;

Normalerweise beginne ich mit einem leeren String und füge ihn dann Stück für Stück an:

$foo = '';

$foo .= 'function sayHello()'
    .'    alert( "Hello" );'
    ."}\n";

$foo .= 'function sum( a , b )'
    .'{'
    .'    return a + b ;'
    ."}\n";

(Bitte stoppen Sie Beiträge wie "ähm. Sie antworten auf eine fünf Jahre alte Frage." Warum nicht? Es gibt viele Leute, die nach einer Antwort suchen. Und was ist falsch, wenn Sie fünfjährige Ideen verwenden? Wenn sie nicht "ihre" Lösung finden Sie würden eine neue Frage eröffnen. Dann sind die ersten fünf Antworten nur "Verwenden Sie die Suchfunktion, bevor Sie fragen!" Ich gebe Ihnen eine andere Lösung, um solche Probleme zu lösen.)

0
hiddenAlpha