Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 семестр / Инструм.средства / ЛЕКЦИИ / Лекция №4 Общие понятия и описание PHP.doc
Скачиваний:
78
Добавлен:
17.02.2016
Размер:
186.88 Кб
Скачать

8.2. Инструкции include

В отличие от require директива include позволяет включить код в сценарий во время выполнения сценария. Использование этой директивы выглядит следующим образом:

include имя_файла;

Возможно, вам нужно динамически менять заголовок в зависимости от ситуации:

for ($1 = 0; $i<4; $i + + ) {

inlcude "header{$i}.html"

}i

Создайте четыре файла. header0. ntml. headerl.html, header3.html и header3.html. Пусть каждый из них содержит соответствующую имени файла цифру — от 0 до 3. При выполнении сценария вы увидите вывод 0123. Данный вывод означает, что содержимое файлов вставляется в сценарий во время его выполнения. Замените include на require, я вы почувствуете разницу.

Обратите внимание на фигурные скобки. При таком контексте использования include они обязательны. Почему? Интерпретатор просто заменяет include содержимым файла. Представьте, что наш файл содержит не один, а несколько операторов. Получится следующее:

for ($1=0; $1<4; $1++)

operatorl;

operator2;

operators;

Как вы видите, мы получаем совсем не то, на что рассчитывали. Мы хотели, чтобы все три оператора выполнились четыре раза, а на самом деле, четыре раза выполняется только первый оператор, а остальные два будут выполнены после окончания работы цикла. Отсюда следует небольшой вывод: если вы забудете заключить include в фигурные скобки (в цикле), то ваша программа будет работать некорректно или вообще возникнет ошибка. Всегда заключайте инструкцию include в фигурные скобки!

8.3. Особенности использования include и require

Что же происходит на самом деле при использовании include? Мы знаем, что PHP преобразует наш сценарий в собственное внутреннее представление. Первую строку, вторую, третью... И так, пока он не дойдет до инструкции include. Затем PHP прекращает транслировать наш сценарий и переключается на указанный в include файл. Вполне объяснимо: интерпретатор не знает, что будет в этом файле, поэтому не может отложить его трансляцию «до лучших времен». Если у вас большая программа, и она подключает дополнительные файлы с помощью include, вряд ли она будет работать быстро, поскольку из-за особенностей include быстродействие резко снижается.

С require таких проблем нет: файл включается до выполнения сценария, то есть на момент трансляции он уже включен в наш сценарий и PHP нет необходимости ждать, пока оттранслируется указанный файл. Что же использовать? Если вам нужно подключить какой-то дополнительный модуль (например, класс HtmlMimeMail, который будет рассматриваться в этой книге), используйте require. Если вы точно знаете, что вам нужно включить какой-то файл не один раз, используйте include, однако старайтесь по возможности использовать require везде, где только можно.

8.4. Инструкции однократного включения include_once и require_once

Ваша программа разрослась до такой степени, что вы не можете вспомнить, какой файл вы включали, а какой — нет? Такого быть не может! Неужели не видно, что и где включается?

Такая ситуация встречается довольно часто при разработке действительно больших сценариев. Предположим, что у нас есть сценарий main.php, в который включены файлы header .php, code.php, footer .php. В файл code.php тоже включается несколько файлов. В одном из этих файлов находится инструкция:

require "header.php";

Получается, что фаил header .php включон дважды.. Чтож бывает - вы забыли или кто-то из ваших коллег даже не подозревал, что файл header.php уже включен. Такое включение может стать причиной серьезной ошибки, которую очень трудно найти.

Разработчики PHP предусмотрели выход из этой ситуации. Используя инструкции однократного включения include_once и require_once, вы можете быть уверены: ни один файл не будет включен дважды. Работают эти инструкции точно так же, как и include и require, но с одним отличием: перед включением файла интерпретатор проверяет, включался ли этот файл или нет. Если да, то файл не будет включен в состав сценария. Конечно, использование этих инструкций требует дополнительных усилий от вашего интерпретатора, поскольку он должен помнить имена всех включенных файлов, но это лучше, чем помнить их самому.