Обработка текста, не входящего в теги PHP

doran7

Новичок
Мне почему-то удобно было делать такие вещи:

Способ 1.

$items .= "
<p class=\"info noprint\">
<span id=\"s1title\"><strong><a href=\"[~".$id."~]\">".$title."</a></strong></span><br>
<span class=\"date\">".$date."</span><span class=\"noscreen\"> |</span>
<span class=\"author\">".$author."</span><span class=\"noscreen\"> |</span>
<span class=\"rate\">".'Рейтинг: '.$cnt."</span><span class=\"noscreen\"> |</span>
<span class=\"categ\">".$categor."</span><span class=\"noscreen\"> |</span>
<span class=\"comments\">".'Комментарии: '."</span><span class=\"noscreen\"></span>
<div>".$annote."</div>
</p>

";
есho $items.$output;

Потом прочитал, что это некошерно. А рекомендуют что-то типа такого:

Способ 2

<?php
if ($expression) {
?>
<strong>Это истина.</strong>
<?php
} else {
?>
<strong>Это ложь.</strong>
<?php
}
?>

И называют это профессиональной вставкой. Потому что когда парсер PHP встречает закрывающийся тег ?>, он просто выводит без изменения (без интерпретации) все, что находится после него до следующего открывающего тега <?php. При этом, как пишут, для вывода больших блоков текста выход из режима интерпретации PHP обычно более эффективен, чем отправка всего текста через echo(), print() или что-либо подобное.

Потом в одной статье, не старой, от сентября 2011 г. из журнала "Хакер" (где ерунды не пишут) прочитал примерно такое (по сути): Текст php-файла, не включенный в теги PHP, движок PHP преобразует в инструкции с оператором echo. То есть такие, казалось бы, незадействованные части php-файла, тоже участвует в процессе обработки кода. И даже если там будет одинокий символ пробела или переноса строки, то PHP обработает и их. - аналогично тому, как это происходило бы с выводом этих символов через оператор echo().

Получается, как ни крутись, от echo() никуда не деться.

Я в сомнениях. Как, вообще, правильно?
 

Фанат

oncle terrible
Команда форума
Ахахахах! Хотел ответить подробно, но увидел
из журнала "Хакер" (где ерунды не пишут)
и не смог :)

Впрочем, тут и отвечать, в сущности, нечего.
Лучше бы ты стехи писал.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Правильно так:

1. Берешь свои журналы Хакер, выкидываешь накер...
2. Берешь книгу по PHP, рекомендую Котерова, ссылки есть на этом форуме
3. Читаешь.
4. Потом смотришь, что ты тут написал и понимаешь, как надо делать
 

Фанат

oncle terrible
Команда форума
Мда, а если серьёзно.
Берёшь свой свой текст из способ 1, и без хакерства и жульничества переводишь его в "профессиональный" вид. именно его, а не какие-то левые каляки-маляки.
постишь оба варианта здесь, оформив в РНР тег.
 

Redjik

Джедай-мастер
Омг, вот это феерия в способе 1...
Тебе разбираться надо в разнице между одинарными и двойными кавычками, а не как кешеры опкода работают...
 

doran7

Новичок
Благодарю за ответы.
Двойные кавычки для вставки переменных, одинарные - для вставки текста. Да, там у меня с ними мешанина... но скрипт рабочий самописный и довольно объемный - 400 строк, если править -то все, а руки не доходят.

Котеров, Костарев "PHP 5 в подлиннике". — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2008. — 1104 с: ил. Это то, что у меня имеется. Подойдет, или надо новее?
Пока только бегло просмотрел процентов 20 книги...
 

Фанат

oncle terrible
Команда форума
если править -то все
- Не дам я Некту два яблока, хоть он дерись!!!
поэтам сложно даются абстрактные материи.
Ему говорит переделать тот кусок кода, который он сам же и запостил, не 400 строк, а 10.
А он, витая в эмпиреях, подумал про целый код... и делать в итоге вообще ничего не стал.
Логика железная, чоуштам.

Казалось бы, если и не собирался править - то зачем было спрашивать?
 

Фанат

oncle terrible
Команда форума
Ё-моё, чё там править-то? Дел на 90 секунд:
PHP:
<p class="info noprint">
<span id="s1title"><strong><a href="[~<?=$id?>~]"><?=$title?></a></strong></span><br>
<span class="date"><?=$date?></span><span class="noscreen"> |</span>
<span class="author"><?=$author?></span><span class="noscreen"> |</span>
<span class="rate">Рейтинг: <?=$cnt?></span><span class="noscreen"> |</span>
<span class="categ"><?=$categor?></span><span class="noscreen"> |</span>
<span class="comments">Комментарии: </span><span class="noscreen"></span>
<div><?=$annote?></div>
</p>
и твой старый код
PHP:
$items .= "
<p class=\"info noprint\">
<span id=\"s1title\"><strong><a href=\"[~".$id."~]\">".$title."</a></strong></span><br>
<span class=\"date\">".$date."</span><span class=\"noscreen\"> |</span>
<span class=\"author\">".$author."</span><span class=\"noscreen\"> |</span>
<span class=\"rate\">".'Рейтинг: '.$cnt."</span><span class=\"noscreen\"> |</span>
<span class=\"categ\">".$categor."</span><span class=\"noscreen\"> |</span>
<span class=\"comments\">".'Комментарии: '."</span><span class=\"noscreen\"></span>
<div>".$annote."</div>
</p>

";
Чтобы не видеть разницу - ну я не знаю, надо совсем глаз не иметь.
Проблема не в "эффективности интерпретации", что полная ерунда, а в эффективности восприятия. Первый вариант тупо читать можно, в отличие от второго.
 

WMix

герр M:)ller
Партнер клуба
doran7 кажись это и спросил...
doran7
есть еще один способ, именнуемый шаблонами (Smarty, Twig)... я вот как раз пытаюсь для себя понять, что "кошернее", голый пхп или всеже шаблон.. вроде удобнее пхп, а кошернее шаблон...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
То есть голый PHP уже не шаблон?)
 

AmdY

Пью пиво
Команда форума
doran7
про то что в обоих случаях делается эхо - правда, другое дело как удобнее. Фанат продемонстировал преимущества в наглядности второго, ещё удобнее вариан с шаблонизаторами типа смарти о которых упомянул WMix, есть ещё варианты с xslt которые имеют свои плюсы, я склоняюсь к идее haml, но пока решения на его основе имеют ряд проблем и ограничений.

WMix твиг однозначно удобнее, особенно когда перестаёшь мыслить категориями php вставок и используешь наследовани и макросы, какая разница в кошерности. Кошерный подход haml, так как он не требует модификаций шаблонов и решает проблему - верстальщик-программист.
 

WMix

герр M:)ller
Партнер клуба
c0dex
придраться хочешь?
AmdY
http://haml.info/tutorial.html прикольно!!!, а как на счет php решения? http://phphaml.sourceforge.net/ ?

xslt очень красивое решение, но дорого если onfly генерить, сложно если пхп генерить - найти верстальшика не реально, смена шаблона головная боль....

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

WMix

герр M:)ller
Партнер клуба
я не знаю, мне очень нравиться xslt, да это глупость закрывать теги таким способом это инженеры не додумали (они и не пишут), но подход очень правильный, на мой взгляд... если ты умеешь писать, каждый новый блок занимает 3-7 строк и нифига там нет избыточности - огромная логика спрятана в xPath
xquery тоже прикольно, хотя несколько в другую сторону....

лет 7 назад я читал постоянно www.raleigh.ru, там был некий типец taler, это почти как фанат только еще больший философ, жаль кстати что форум сгинул, его решения на xslt были оч прикольные....
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
WMix
Я хочу чтоб ты понял, что шаблонизатор он кошернее не всегда, а php всегда php)
 

С.

Продвинутый новичок
WMix, да и в данном конкретном случае у пациента кромешный ужас в голове. Ему бы элемнтарные азы РНР понять, а ты ему какой-то шаблонизатор втюхиваешь. Ну надо же здравыйи смысл в конце концов иметь.
 
  • Like
Реакции: craz

WMix

герр M:)ller
Партнер клуба
c0dex
вас так много а я один, одни говорят юзай шаблоны, другие пхп это тоже шаблон,...

раньше писал только шаблонами, после с появлением <?=$hello?> тэга сменил мнение что php тоже правильно,
и начал писать только php (и в настоящее время тоже), покрутившись по форуму, почитав топики, на мой взгляд умных людей,
задумался заного о шаблонах...

мои личные причины (почему я хочу посадить себя на TWIG)

1. это должно быть быстрее
спорный вопрос, шаблон генерит php а php не может быть быстрее php,
другой вопрос: какой php мы пишем и какой генерит шаблонизатор?, задумываемся ли мы о скорости, когда пишем шаблоны?, или хотим ли мы об этом вообще думать?

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

3. это должно быть безопасней,
как часто мы пишем htmlspecialchars, а вдруг забудем?, также существует песочница что на мой взгляд порою необходима!

вообще в последнее время прихожу к мнению, что чем больше запрещено по умолчанию (но можно разрешить), тем лучше...
да гемороя больше, но и качаство кода лучше (вопрос о "кошерности")

но разговор не об этом, если я правильно понял, тебе не понравилось, что пхп я не назвал шаблоном?

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

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

Redjik

Джедай-мастер
WMix
по поводу твига, сейчас не найду форум на котором фабиен радовался, что какой-то мужик написал экстеншен, чтобы узкие места твига быстрее парсить...

сорри, возможно чушь полная, но где-то точно видел, возможно про старую версию.
 
Сверху