PHP I Насчет закрывающих тэгов ... ?>

1.4K
.
╭∩╮ (`-`) ╭∩╮
Вот глянул я один пост на форуме, в котором его автор пытался мне указать на ошибку, мол в одном файле нет закрывающего тега РНР ?>

Если внимательно гляните в папку /incfiles последней версии (4.4.0) то увидите, что закрывающих тэгов нет ни в одном файле.
Это не ошибка, так надо. Более того, для INCLUDE файлов именно так и надо поступать.
---
В начале я просто хотел автору поста ответить "не ошибка, так надо", однако потом подумал, что данный вопрос может быть интересен многим и я решил написать данную статью, где объясню, почему вредны закрывающие тэги для подключаемых файлов в РНР, да и вообще...
.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
Для начала, давайте разберемся, как WEB сервер обрабатывает PHP?
Я приведу "общие, грубые примеры", ибо сервер можно настроить как угодно. Но не в этом дело, мы сейчас говорим о другом и чтоб было понятно, я приведу простейшие примеры.

1) Если, к примеру, расширение файла .html он выдается "как есть" браузеру.
2) Если расширение .php то сервер подключает интерпретатор PHP

Но это еще не значит, что он (файл) будет обрабатываться интерпретатором PHP. Просто сервер знает, если поступит соответствующая комманда, нужно передать код файла интерпретатору PHP.

Открывающие и закрывающие тэги РНР как раз и являются этими самыми коммандами.
Открывающий тэг <?php включает интерпретатор и весь дальнейший код, будет рассматриваться сервером как РНР. До тех пор, пока не поступит закрывающий тэг ?>
или не будет достигнут конец файла
.
╭∩╮ (`-`) ╭∩╮
Как вы наверно заметили, глядя готовые скрипты, ф одном файле может сочетаться и чистый HTML и PHP.
К примеру, весь файл состоит из чистого HTML, но в одном месте нужно вывести маленький счетчик данных, написанный на PHP.
Мы делаем в код врезку <?= ...наш код... ?> или что-то подобное.
В принципе, для этого и нужен закрывающий PHP тэг ?> чтоб указать интерпретатору, что PHP на этом месте заканчивается и далее будет чистый HTML или что-то другое, но не PHP
.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
А вот теперь, я отвечу на главный вопрос темы, почему я убрал из файлов закрывающие PHP тэги ?>
---
Можете сами провести эксперимент.
с ЛЮБОГО файла нашего двига, удалите закрывающий PHP тэг, потом гляньте, работает или нет, выдает ли ошибки?
Увидите, что все отлично работает и без закрывающих тэгов.
---
Рассматривая ситуацию, можно догадаться, что открывающим тэгом <?php мы дали указание серверу, что далее пошел PHP код, который должен обрабатываться интерпретатором.
Он и будет обрабатываться до тех пор, пока не встретит закрывающего тэга ?> или не достигнет конца файла.

В файлах двига нет чистого HTML, все на PHP, поэтому, закрывающие тэги ?> не нужны.

Более того, для INCLUDE файлов они могут быть вредны.
Очень часто, нгачинающие кодеры пользуются плохими редакторами, или невнимательно следят за кодом. И у них, после закрывающего тэга ?> могут быть пробелы, или переводы строк.
Из-за этого могут возникнуть ошибки при работе, которые потом долго и нудно будете выискивать.

Вы помните, сколько раз предупреждали, что СЛЕДИТЕ, чтоб после ?> небыло пробелов и других символов.
Но можно поступить гораздо проще (и логичнее), вообще убрав закрывающий тэг ?>
Зачем он нам, если в файле после него нет чистого HTML?
.
Поверь в мечту!
интересно однако...,таким способом можно в шапке включить интерпритатор а в ногах его выключить - об этом я как раз думал недавно,а теперь как оказалось его вообще закрывать не стоит...хм
.
╭∩╮ (`-`) ╭∩╮
Для меня самого, поначалу было неожиданно, точнее, я об этом не задумывался.
Но к примеру, новейший и крутейший редактор phpStorm изначально создает РНР файл без закрывающего тэга.
Меня заинтересовало, я начал разбираться и понял. что они (закрывающие тэги) в большинстве случаев (когда ф файле только РНР код) вообще нафиг не нужны
.
Как то уже говорил об этом, но меня никто не послушал
.
Поверь в мечту!
однако эти теги необходимы если мы наоборот вставляем php код в тело страницы html,в двиге же применяется код html в теле php,и значит закрывать тег не стоит,я правильно понял?
.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
zumak (12.08.2011/21:40)
однако эти теги необходимы если мы наоборот вставляем php код в тело страницы html,в двиге же применяется код html в теле php,и значит закрывать тег не стоит,я правильно понял?
Да, правильно.
Или же, если после РНР кода, у тебя идет кусок с чистым HTML кодом, зачем его выводить с помощью echo если можно отдать напрямую, не нагружая интерпретатор?
.
Поверь в мечту!
интересно а вызов интерпритатора php нагружает сервак?,если да то насколько сильно?
Всего: 37