2010-04-20 5 views
38

Je suis novice en PHP et je n'arrive pas à comprendre les règles d'utilisation de la fonction d'écho. Par exemple, si j'ai besoin de faire écho à un grand bloc de css/js, ai-je besoin d'ajouter un écho à chaque ligne de texte ou y a-t-il un moyen de répercuter un gros bloc de code avec un seul écho?PHP Echo un gros bloc de texte

Lorsque je tente de faire écho un grand bloc de code comme celui-ci, je reçois une erreur:

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 { 

} 

Y at-il une meilleure façon de faire écho grands blocs de code sans beaucoup de travail (ajout d'écho chaque ligne par exemple)?

Répondre

60

Une option consiste à sortir du bloc php et à écrire simplement du code HTML.

Avec votre code, après l'accolade de votre instruction if ouverture, fin PHP:

if (is_single()) { ?> 

Retirerensuitelesentretoisescaoutchouc echo ' et la ';

Après tout votre code html et css, avant la fermeture }, écrire:

<? } else { 

Si le texte que vous voulez écrire sur la page est dynamique, il devient un peu plus délicat, mais pour l'instant cela devrait fonctionner correctement.

+6

-1 Cela rend le code difficile à lire et sujettes à des erreurs, et qu'il faut éviter à. La syntaxe Heredoc, comme mentionné par @nickf est la voie à suivre. –

+2

Mais c'est une solution possible, alors pourquoi -1? – Black

+0

Juste parce que c'est une solution possible, ne signifie pas que c'est une recommandation. @EdwardBlack –

18

Découvrez heredoc. Exemple:

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

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

Le est également nowdoc mais ne analyse est effectuée à l'intérieur du bloc.

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

Heredoc syntax peut être très utile:

// 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; 
+6

Je ne suis pas un fan de la syntaxe heredoc, mais je vous donne un +1 parce que vous êtes le premier à réellement illustrer la syntaxe heredoc, ce qui en fait une réponse utile. – thomasrutter

+0

@thomasrutter - Je n'en suis pas non plus un grand fan: de nombreux IDE ne le traitent pas bien, et il casse votre indentation de code ou vous obtenez une chaîne avec une tonne d'espaces inutiles. – nickf

+0

points à noter: si vous utilisez Eclipse (avec PDT) pour développer PHP, vous constaterez que heredoc a une surbrillance de code incorrecte. – Raptor

5

texte Faisant écho qui contient des sauts de ligne est très bien, et il n'y a pas de limite à la quantité de texte ou les lignes que vous pouvez faire écho à la fois (sauf pour la mémoire disponible).

L'erreur dans votre code est causée par les guillemets simples sans échappement qui apparaissent dans la chaîne.

Voir cette ligne:

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

Vous auriez besoin d'échapper à ces guillemets simples dans une chaîne de PHP que ce soit une seule ligne ou non.

Il y a une autre bonne façon de faire écho grandes chaînes, cependant, et qui est de fermer le bloc PHP et ouvrir plus tard:

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 { 

} 

Ou une autre alternative, ce qui est sans doute mieux pour une meilleure lisibilité, est de mettre tout ce HTML statique dans une autre page et l'inclure().

+0

Juste apprendre ce que "PHP Pros" faire, mais en ce qui concerne les applications HTML, il semble que l'utilisation d'inclure serait le chemin à parcourir. –

5

Votre problème est effectivement causé par:

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

Vous devez échapper aux guillemets simples pour être \'

Cependant: L'utilisation d'un Heredoc est une bien meilleure idée, car il sera beaucoup Nettoyeur globalement.

+0

euh oh prouvez-vous de prouver au sujet d'un heeredoc? et qu'en est-il des modèles? Et qu'en est-il de la coloration syntaxique? Êtes-vous fan de l'édition d'énormes HTML non pas en HTML mais en tant que chaîne PHP de couleur unique? –

+1

Je préfère les gabarits (Smarty), mais dans ce cas cela semblerait un peu trop compliqué pour sa question. Je suis fan de l'utilisation de Heredoc sur une énorme déclaration 'echo'. Votre solution est également bonne, mais elle ne me permet pas de mettre des variables dans le texte (facilement) je devrais faire '' Qui peut devenir ennuyeux. –

+0

"ce qui peut devenir ennuyeux" OMG, ouvrez les yeux! tout cadre actuel l'utilise pour les templates, au lieu de smarty monstrueux et inutile –

6

Homme, PHP n'est pas perl!
PHP peut simplement échapper à HTML :) http://www.php.net/manual/en/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! 
} 
?> 

Je me demande pourquoi ces beaucoup de gens coincés à heredoc laid.

+2

Heredoc n'est pas * si * laid, et est utile si vous voulez créer une chaîne et/ou interpoler beaucoup de variables. Sinon, l'échappement PHP est une solution beaucoup plus propre. Mais je pense que je suis content que Perl ne puisse pas faire ça. – Duncan

+1

@Duncan temps d'apprendre des modèles :) –

+1

Oh, j'ai ... mais le code Perl que j'ai maintenu est assez de cauchemar sans qu'il soit mélangé avec HTML. D'autant que le HTML serait probablement compilé en Perl :) – Duncan

2

développiez @ réponse de hookedonwinter, voici un autre (plus propre, à mon avis) Syntaxe:

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

Je préfère concaténer plusieurs chaînes ensemble. Cela fonctionne soit pour l'écho ET pour les variables. Certains IDEs initialisent automatiquement de nouvelles lignes si vous appuyez sur Entrée. Cette syntaxe génère également une petite sortie car il y a beaucoup moins d'espaces dans les chaînes.

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

Normalement, je commence par une chaîne vide puis ajoutez peu à peu à elle:

$foo = ''; 

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

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

(S'il vous plaît arrêter les messages comme Pourquoi ne pas « uh Vous répondez à cinq jears vieille question. ». Il y a beaucoup de gens qui cherchent une réponse et ce qui ne va pas utiliser des idées de cinq ans, s'ils ne trouvent pas "leur" solution, ils ouvrent une nouvelle question, alors les cinq premières réponses sont seulement "utiliser la fonction de recherche avant vous demandez! "Donc, je vous donne une autre solution pour résoudre des problèmes comme celui-ci.)

+0

Avez-vous défini cette indentation dans votre IDE (pour définir une chaîne multilignée alignée sur chaque partie)? –

0
$num = 5; 
$location = 'tree'; 

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

Juste éclater où vous devez.

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

Ne pas utiliser forme raccourcie.<? est en conflit avec XML et est désactivé par défaut sur la plupart des serveurs.

-1

Vous pouvez y parvenir en imprimant votre chaîne comme:

<?php $string ='here is your string.'; print_r($string); ?>