2010-04-20 2 views
38

Im новый для PHP, и я не могу понять, какие правила предназначены для использования функции эха. Например, если мне нужно выполнить эхо большого блока css/js, нужно ли добавить эхо в каждую строку текста или есть способ эхо большого блока кода с одним эхом?PHP Echo большой блок текста

Когда я пытаюсь повторить большой блок кода, как этот, я получаю сообщение об ошибке:

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 { 

} 

Есть ли лучший способ эха больших блоков коды, не много работы (добавление эха каждая строка, например)?

ответ

60

Один из вариантов - выйти из блока php и просто написать HTML.

С вашим кодом, после открывающей фигурной скобки вашего, если заявления, конца PHP:

if (is_single()) { ?> 

Затем удалить echo ' и ';

После всех вашего HTML и CSS, перед закрытием }, написать:

<? } else { 

Если текст, который вы хотите записать на страницу динамична, она становится немного сложнее, но пока это должно работать нормально.

+6

-1 Это делает код трудно читать и склонны к ошибкам, и определенно следует избегать. Синтаксис Heredoc, как упоминается @nickf, - это путь. –

+2

Но это возможное решение, так почему -1? – Black

+0

Просто потому, что это возможное решение, это не значит, что оно рекомендуется. @EdwardBlack –

18

Отъезд heredoc. Пример:

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

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

также nowdoc, но не синтаксического анализа не делается внутри блока.

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

Heredoc syntax может быть очень полезным:

// 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

Я не поклонник синтаксиса heredoc, но я даю вам +1, потому что вы первый, кто действительно иллюстрирует синтаксис heredoc здесь, что делает его полезным ответом. – thomasrutter

+0

@thomasrutter - Я также не являюсь его большим поклонником: многие IDE не справляются с этим хорошо, и это либо наполнит ваш отступ кода, либо вы получите строку с тонны бесполезных пробелов. – nickf

+0

указывает на заметку: если вы используете Eclipse (с PDT) для разработки PHP, вы обнаружите, что heredoc имеет неправильное выделение кода. – Raptor

5

Повторяя текст, который содержит разрывы строк в порядке, и нет никаких ограничений на количество текста или строки, которые вы можете эхо сразу (за исключением доступной памяти).

Ошибка в коде вызвана невыпадающими одинарными кавычками, которые появляются в строке.

Смотрите эту строку:

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

Вы должны были бы избежать этих одинарные кавычки в PHP строку, будь то одна строка или нет.

Существует еще один хороший способ эхо больших строк, хотя, и это, чтобы закрыть PHP блок и открыть его позже:

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 { 

} 

Или другой вариант, который, вероятно, лучше для удобства чтения, это поставить все, что статический HTML на другую страницу и включить() это.

+0

Просто узнайте, что делают «PHP-профессионалы», но что касается HTML-приложений, похоже, что использование include будет способом. –

5

Ваша проблема на самом деле вызваны:

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

Вам нужно бежать одиночные кавычки, чтобы быть \'

Однако: Использование Heredoc гораздо лучше идея, так как это будет намного чистый в целом.

+0

Ухо, что нужно доказать о heeredoc? и как насчет шаблонов? А как насчет синтаксиса? Вы любите редактировать огромный HTML не как HTML, а как одноцветную строку PHP? –

+1

Я предпочитаю шаблоны (Smarty), но в этом случае это может показаться слишком сложным для его вопроса. Я поклонник использования Heredoc над массивным выражением 'echo'. Ваше решение тоже хорошо, но это не позволяет мне помещать переменные в текст (легко), я должен был бы сделать '', Который может раздражать. –

+0

", который может раздражать" OMG, откройте глаза! каждая текущая структура использует его для шаблонов вместо чудовищного и бесполезного smarty –

6

Человек, PHP не perl!
PHP может просто уйти из 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! 
} 
?> 

Интересно, почему такие многие люди застряли в уродливой Heredoc.

+2

Heredoc не является * этим * уродливым и полезен, если вы хотите создать строку и/или интерполировать множество переменных. В противном случае побег PHP является гораздо более чистым решением. Но я думаю, что я рад, что Perl не может этого сделать. – Duncan

+1

@ Duncan время, чтобы узнать шаблоны :) –

+1

О, у меня есть ... но код Perl, который я поддерживал, достаточно кошмара, без его смешивания с HTML. Тем более, что HTML, вероятно, будет скомпилирован в Perl :) – Duncan

2

Чтобы расширить @ hookedonwinter Ответим, вот альтернативный (уборщик, на мой взгляд) Синтаксис:

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

Я предпочитаю объединять несколько строк вместе. Это работает либо для echo AND для переменных. Также некоторые IDE автоматически инициализируют новые строки, если вы нажмете enter. Этот синтаксис также генерирует небольшой результат, потому что в строках гораздо меньше пробелов.

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

Обычно я начинаю с пустой строкой, а затем добавить по кусочкам к нему:

$foo = ''; 

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

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

(Пожалуйста, прекратите сообщения как Почему не «ух ты ответить на пять jears старого вопроса.». «Есть много людей, которые ищут ответ. И что неправильно использовать пятилетние идеи? Если они не найдут« своего »решения, они откроют новый вопрос. Тогда первые пять ответов будут« использовать функцию поиска до вы спрашиваете! »Итак, я даю вам другое решение для решения таких проблем.)

+0

Вы установили этот отступ в своей IDE (чтобы установить многострочную строку, выровненную по каждой части)? –

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

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

Просто прорваться, где вам нужно.

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

Не используйте укороченный-форму.<? конфликтует с XML и по умолчанию отключен на большинстве серверов.

-1

Вы можете достичь этого путем печати вашу строку как:

<?php $string ='here is your string.'; print_r($string); ?> 
Смежные вопросы