PHP-4 Эффективная работа


If
While
Do..while
For
Foreach
Break
Continue
Switch
Альтернативный синтаксис представления управляющих структур
Declare
Require
Include
Require_once()
lnclude_once()

6.11. Requfre()

Оератор require() осуществляет замещение обращения к нему содержимым показанного файла аналогично директиве препроцессора Си #i nc lude.

В случае если PHP-машина скомпилирована с поддержкой режима «URL fopen vrappers», вы можете указывать имя файла с помощью его URL-адреса (см. описание fopen () в разделе 10.3.10).

Вопреки ожиданиям, связанным с «внешним видом», requ i re () не является функцией и должна рассматриваться вами как конструкция языка или, если угодно, как оператор. В отличие от include (), рассматриваемой ниже, requtre() всегда считывает указанный файл, даже если впоследствии не будет выполнено ни одной строки из него.

совет
       Если же вам надо реализовать условную загрузку файла, воспользуйтесь include().

Сами по себе условные операторы не оказывают влияния на работу require(). Вы не можете использовать ее вызов в качестве тела оператора i f. Однако если строка с require() тем или иным способом не получила управления и не была исполнена, то соответствующий файл загружаться не будет.

Аналогичным образом не оказывают никакого влияния на requirе() и механизмы управления циклами. И хотя код в теле цикла управляется как обычно, оператор require () выполняется только один раз.

Это означает, что вы не можете «безнаказанно» поместить rеquirе () внутрь цикла, рассчитывая, что содержимое внешнего файла будет включаться на каждой итерации. Чтобы достичь этого эффекта, вам необходимо использовать оператор include().

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

примечание
       Если же включаемый файл загружается посредством HTTP-протокола с использованием «оберток» fopen и указанный в URL-адресе файла сервер интерпретирует запрашиваемый файл как PHP-код, переменные могут передаваться во включаемый файл методом GET. В этом случае включаемая программа фактически выполняется на удаленной машине, а в вызывающую программу включается результат ее выполнения.

Вот несколько примеров использования директивы requirе ():
/* Этот вызов работать не будет, поскольку файлы с расширением
          .txt как программы сервером не обслуживаются
*/
require ("http://someserver/ftie.txt?varone=l&vartwo=2");
/* Этот вариант также неработоспособен, поскольку имя файла не интерпретируется как URL по умолчанию
*/
require ("file.php?varone=l&vartwo=2");

/* А вот эти варианты работают правильно! */
require ("http://someserver/file.php?varone=1&vartwo=2");
$varone =1;
$vartwo =2;
require ("f1le.txt");    /* Так можно. */
require ("file.php");    /* И так тоже - переменные */
                              /•* будут переданы */

В древней версии РНР 3 вы могли поместить внутрь включаемого файла оператор return, который обеспечивал возврат из функции, внутри которой был помещен вызов requi re (). В PHP 4 так поступать нельзя. Если вы пытаетесь реализовать подобную логику программы, то должны использовать include() (раздел 6.12). См. .также: requi re_once() (раздел 6.13), include_once() (раздел 6.14), readfile() (раздел 10.5.3 и virtual() (раздел 15.3.6).

6.12. lnclude()

Оператор incl ude () включает и выполняет указанный в качестве аргумента файл. В случае если PHP-машина скомпилирована с поддержкой режима «URL fopen wrappers»5, вы можете указывать имя файла с помощью его URL-адреса (см. описание fopen ()в разделе 10.3.10).

примечание
       Напомню, что при включении внешнего файла PHP-машина автоматически отключает режим PHP-кода и переходит в режим HTML, что позволяет включать «голые» HTML-фрагменты. После завершения обработки файла машина автоматически возвращается в режим интерпретации РНР. Поэтому любой PHP-код во включаемых файлах должен быть помещен в открывающий и закрывающий теги аналогично основной программе.

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

$f1les = array ('first.inc', r'second.inc', 'third.inc');
for ($1 = 0; $i < count($files); $i++) {
          include $files[$i];
}

Кроме того, include() отличается от require () тем, что определение имени внешнего файла и его загрузка производятся повторно при каждом вызове include(). Это означает, что при изменении содержимого внешнего файла с момента предыдущего вызова вы загрузите новые результаты. Также вы можете использовать include () внутри тела условного оператора if.

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

Вот несколько примеров использования этого оператора:
/* Это неправильный синтаксис, который работать не будет */

if ($condition)
          include($file):
else
          include($other);

/* А вот так - правильно! */
if ($condition) {
          include($file);
) else {
          include($other);
}

В отличие от оператора require () допускается помещать во включаемый с помощью include() файл оператор return. Кроме того, вы можете таким образом возвращать значения в вызывающую программу, попросту используя include 6 как своеобразную функцию, которая возвращает значения.

примечание
       Попытка использовать подобное решение в программе на РНР 3 приведет к генерации сообщений об ошибке.

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

<?php
# /examples/php/part2/fragl.inc

echo "<b>fragl</b> - 'До точки возврата из подпрограммы <br>\n";
if (1) {

return 27;
}
echo "<b>fragl</b> - После точки возврата <br>\n" ;
?>

Теперь сформируем второй фрагмент, который при вызове подгружает предыдущий:
<titlе>Проверка работы include</title>
<body bgcolor="#FfFFFF">
<font
<?php
# /examples/php/part2/include.php ,

echo "Программа <b>include. php</b><p><hr>";

$retval = include <'fragl.inc') :
echo "<р><b>Главная</b> - ".
          "Возвращенное значение : '$retval'<br>\n";
?>

Результат выполнения этой «связки» .программ представлен на рис. 6.4. Как видите, хотя
назад
далее

Сайт управляется системой uCoz