Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PI_lektsii_2016.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆
    1. Оператори включення

Include – дозволяє включати код, що міститься в зазначеному файлі, і виконувати його стільки разів, скільки програма зустрічає цей оператор. Включення може здійснюватися будь-яким з перерахованих способів:

include 'ім'я_файлу';

include $ file_name;

include ("ім'я файлу");

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

<? Php

# params.inc

# ------------

$ User = "Вася";

// Функція date () повертає дату і час.

// Тут - дату в форматі: день.місяць.рік

 $ Today = date ( "d.m.y");

?> <? Php

# include.php

# -------------

include ( "params.inc");

// Змінні $ user і $ today

// Задані у файлі params.inc.

// Тут ми теж можемо ними користуватися

// Завдяки команді include ( "params.inc")

echo "Привіт, $ user! <br>";

// Виведе "Привіт, Вася!"

echo "Сьогодні $ today";

// Виведе, наприклад, "Сьогодні 7.07.05"

?>

Зауважимо, що використання оператора 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 з'являється всередині функції вхідного файлу, то код, що міститься у викликаючому файлі, буде вести себе так, як ніби він був визначений всередині функції. Таким чином, він успадкує область видимості цієї функції. Хоча ми і не знайомилися ще з поняттям функції, все ж наводимо тут ці відомості в розрахунку на інтуїтивне його розуміння.

Приклад. Нехай файл для вставки params.inc залишиться таким же, а include.php буде наступним:

<? Рhp

// оголошуємо функцію з ім'ям Footer

function Footer ()

{// включаємо файл params.inc.

include ("params.inc");

// тепер його змінні можна використовувати,

// але тільки всередині функції

$ Str = "Сьогодні: $ today <br>";

$ Str. = "<a Href='mailto:help@domain.zone'>

Сторінку створив $ user </a> ";

echo "$ str";

}   // викликаємо функцію Footer ()

 Footer ();

// Отримаємо:

// Сьогодні: 08.07.05

// Сторінку створив Вася

echo "$ user, $ today";

// Виведе кому, тому що змінні $ user і $ today

// Видно тільки всередині функції Footer () ?>

НЕТ.Крім локальних файлів, за допомогою include можна включати і зовнішні файли, вказуючи їх url-адреси. Дана можливість контролюється директивою url_fopen_wrappers в файлі налаштувань PHP і за замовчуванням, як правило, включена. Але в версіях PHP для Windows до PHP 4.3.0 ця можливість не підтримується зовсім, незалежно від url_fopen_wrappers.

include () – це спеціальна мовна конструкція, тому при використанні всередині умовних блоків її потрібно укладати в фігурні дужки.

При використанні include можливі два види помилок - помилка вставки (наприклад, не можна знайти вказаний файл, невірно написана сама команда вставки і т.п.) або помилка виконання (якщо помилка міститься у файлі, що вставляється). У будь-якому випадку при помилці в команді include виконання скрипта не закінчується.

<? Php

// Це невірний запис. Отримаємо помилку.

// Ми ж вставляємо не одну команду,

// а кілька, вони тільки записані

// в іншому файлі

if ($ condition) include ("first.php");

else include ("second.php");

// А ось так правильно.

if ($ condition) {include ("first.php"); }

else {include ("second.php"); }

?>

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

Умовні оператори на require () не впливають. Хоча, якщо рядок, в якій з'являється цей оператор, не виконується, то ні один рядок коду з файлу, що вставляється теж не виконується. Цикли також не впливають на require (). Хоча код, що міститься у файлі, що вставляється, є об'єктом циклу, але вставка сама по собі відбувається тільки один раз.У реалізаціях PHP до версії 4.0.2 використання require () означало, що інтерпретатор обов'язково спробує прочитати вставлений файл.require, як і include, при використанні всередині умовних блоків потрібно укладати в фігурні дужки.

Рішення завдання. Ми хочемо створити програму, яку можна було б використовувати для відправки листів (або просто для їх генерації) із запрошеннями на різні заходи безлічі користувачів. У попередній лекції вже розглядався подібний випадок.

Зараз ми винесемо всю інформацію про людей і події в окремий файл data.php і напишемо програму, не залежну (ну, може, зовсім трохи залежить) від інформації_і_її_структури. У цьому випадку для того, щоб, наприклад, розширити список адресатів, не потрібно буде змінювати скрипт, що генерує запрошення. Крім того, можна буде використовувати інформацію про людей і події в інших скриптах. У самому скрипті, що генерує запрошення letters.php, ми використовували умовні оператори, цикли, require і інші вивчені раніше конструкції:

<?php # data.php

#---------- define("SIGN","З повагою, Вася");

// нехай наш підпис

// буде константою

// інформація про події

$events = array("f" => "день відкритих дверей",

"o" => "відкриття виставки",

"p" => "бал випускників");

// наявна інформація про людей

// (ім'я та електронна адреса)

$people = array("ivan" => array(

"name" => "Іван Іванович",

"email"=> "user_ivan@domain.zone"),

"pit" => array(

"name" => "Петро Петрович",

"email" => "user_petr@domain.zone"),

"semen" => array(

"name" => "Семен Семенович"));

// хто куди запрошується

$who_where["ivan"] = "o"; // Іван – на виставку

$who_where["pit"] = "p"; // Петро – на бал ?> <?php # letters.php

#------------- // включаємо файл з даними про події

require("data.php"); foreach($people as $key => $man_info)

{ // для кожної людини робимо наступне:

$event_key = $who_where[$key];

// отримуємо подія, на яку він запрошується

if ($event_key <> "")

{ foreach($man_info as $key1 => $info)

{

// отримуємо ім'я та email конкретної людини if ($key1 == "name") $str = "Шановний (а), $info";

if ($key1 == "email") $email = $info;

}

// складаємо запрошення

$str .= "<br>Запрошуємо Вас на ".$events[$event_key];

switch ($event_key)

{ // в залежності від події

// додаємо якусь сходинку

case "f":

$str .= "<br>Підтвердіть Вашу участь за телефоном!";

break; case "o":

$str .= "<br>Приходьте за 15 хвилин до відкриття!";

break; case "p":

$str .= "<br>Не забудьте подарунок :-)";

break;} // додаємо підпис

$str .= "<br>".SIGN."<hr>";

// виводимо запрошення

echo $str;

/** * якщо у вас налаштована відправлення пошти за допомогою

PHP, * лист можна відправити командою

mail($email,"Letter",$str); */ } } ?>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]