Опубликован: 01.03.2005 | Уровень: для всех | Доступ: платный
Лекция 3:

Управляющие конструкции

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Операторы включения

include

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

include 'имя_файла';
include $file_name;
include ("имя_файла");

Пример 3.9. Пусть в файле params.inc у нас хранится набор каких-то параметров и функций. Каждый раз, когда нам нужно будет использовать эти параметры (функции), мы будем вставлять в текст нашей основной программы команду include ('params.inc').

params.inc
<?php
$user = "Вася";
$today = date("d.m.y"); 
/* функция date() возвращает дату 
и время (здесь – дату в формате 
день.месяц.год) */
?>

include.php
<?php
include ("params.inc"); 
/* переменные $user и $today заданы в файле
params.inc. Здесь мы тоже можем ими 
пользоваться благодаря команде 
include("params.inc") */

echo "Привет, $user!<br>";  
    // выведет "Привет, Вася!"
echo "Сегодня $today";      
    // выведет, например, "Сегодня 7.07.05"
?>
Пример 3.9. Использование оператора включения include

Заметим, что использование оператора include эквивалентно простой вставке содержательной части файла params.inc в код программы include.php. Может быть, тогда можно было в params.inc записать простой текст без всяких тегов, указывающих на то, что это php-код? Нельзя! Дело в том, что в момент вставки файла происходит переключение из режима обработки PHP в режим HTML. Поэтому код внутри включаемого файла, который нужно обработать как PHP-скрипт, должен быть заключен в соответствующие теги.

Поиск файла для вставки происходит по следующим правилам.

  1. Сначала ведется поиск файла в include_path относительно текущей рабочей директории.
  2. Если файл не найден, то поиск производится в include_path относительно директории текущего скрипта.
  3. Параметр include_path , определяемый в файле настроек PHP, задает имена директорий, в которых нужно искать включаемые файлы.

Например, ваш include_path это . (то есть текущая директория), текущая рабочая директория это /www/. В основной файл include.php вы включаете файл my_dir/a.php, который в свою очередь включает b.php. Тогда парсер первым делом ищет файл b.php в директории /www/, и если такового нет, то в директории /www/my_dir/.

Если файл включен с помощью include , то содержащийся в нем код наследует область видимости переменных строки, где появился include . Любые переменные вызванного файла будут доступны в вызывающем файле с этой строки и далее. Соответственно, если include появляется внутри функции вызывающего файла, то код, содержащийся в вызываемом файле, будет вести себя так, как будто он был определен внутри функции. Таким образом, он унаследует область видимости этой функции. Хотя мы и не знакомились еще с понятием функции, все же приводим здесь эти сведения в расчете на интуитивное его понимание.

Пример 3.10. Пусть файл для вставки params.inc останется таким же, а include.php будет следующим:

<?php
function Footer(){ 
    // объявляем функцию с именем Footer
    include ("params.inc"); 
/* включаем файл params.inc. 
   Теперь его переменными можно пользоваться,
   но только внутри функции */
    $str = "Сегодня: $today <br>";
    $str .= "<a 
	  href='mailto:help@intuit.ru'>Страницу
      создал $user</a>";
    echo "$str";    
}
Footer();   
    // вызываем функцию Footer(). Получим:
//Сегодня: 08.07.05 
//Страницу создал Вася

echo "$user, $today";   
    // выведет запятую, так как 
    // эти переменные видны только 
	// внутри функции
?>
Пример 3.10. Область видимости при использовани include

Кроме локальных файлов, с помощью include можно включать и внешние файлы, указывая их url-адреса. Данная возможность контролируется директивой url_fopen_wrappers в файле настроек PHP и по умолчанию, как правило, включена. Но в версиях PHP для Windows до PHP 4.3.0 эта возможность не поддерживается совсем, вне зависимости от url_fopen_wrappers.

include() – это специальная языковая конструкция, поэтому при использовании внутри условных блоков ее нужно заключать в фигурные скобки.

<?php
/*  Это неверная запись. Получим ошибку.
    Мы же вставляем не одну команду, 
	а несколько, они только записаны 
	в другом файле */
if ($condition) include("first.php");
else include("second.php");
// А вот так правильно. 
if ($condition){ include("first.php"); }
else { include("second.php"); }
?>
Пример 3.11. Использование include()

При использовании include возможны два вида ошибок – ошибка вставки (например, нельзя найти указанный файл, неверно написана сама команда вставки и т.п.) или ошибка исполнения (если ошибка содержится во вставляемом файле). В любом случае при ошибке в команде include исполнение скрипта не завершается.

require

Этот оператор действует примерно так же, как и #include в C++. Все, что мы говорили о include , лишь за некоторыми исключениями, справедливо и для require . require также позволяет включать в программу и исполнять какой-либо файл. Основное отличие require и include заключается в том, как они реагируют на возникновение ошибки. Как уже говорилось, include выдает предупреждение, и работа скрипта продолжается. Ошибка в require вызывает фатальную ошибку работы скрипта и прекращает его выполнение.

Условные операторы на require() не влияют. Хотя, если строка, в которой появляется этот оператор, не исполняется, то ни одна строка кода из вставляемого файла тоже не исполняется. Циклы также не влияют на require(). Хотя код, содержащийся во вставляемом файле, является объектом цикла, но вставка сама по себе происходит только однажды.

В реализациях PHP до версии 4.0.2 использование require() означало, что интерпретатор обязательно попытается прочесть вставляемый файл.

require , как и include , при использовании внутри условных блоков нужно заключать в фигурные скобки.

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Сергей Пантелеев
Сергей Пантелеев
Россия, Москва
Ахмет Арчаков
Ахмет Арчаков
Россия, Магас