ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 18.05.2024
Просмотров: 58
Скачиваний: 0
Якщо файл включений за допомогою 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:somesite.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, при використовуванні усередині умовних блоків потрібно брати у фігурні дужки.
Рішення задачі
І нарешті, повернемося до задачі, сформульованої на початку лекції. Ми хочемо створити програму, яку можна б було використовувати для відправки листів (або просто для їх генерації) із запрошеннями на різні заходи безлічі користувачів. В попередній лекції вже розглядався подібний випадок. Зараз ми винесемо всю інформацію про людей і події в окремий файл data.php і напишемо програму, не залежну (ну, може, зовсім трохи залежну) від цієї інформації і її структури. В цьому випадку для того, щоб, наприклад, розширити список адресатів, не потрібно буде змінювати скрипт, що генерує запрошення. Крім того, можна буде використовувати інформацію про людей і події в інших скриптах. В самому скрипті, що генерує запрошення letters.php, ми використовували умовні оператори, цикли, require і інші вивчені раніше конструкції.
<?php
define("SIGN","С пошаною, Вася");
// хай наш підпис буде константою
// інформація про події
$events = array(
"f" => "день відкритих дверей"
"o" => "відкриття виставки"
"p" => "бал випускників");
// наявна інформація про людей (ім'я і електронна адреса)
$people = array(
"ivan" => array(
"name" => "Іван Іванович"
"email"=>"user_ivan@intuit.ru")
"pit" => array(
"name" => "Петро Петрович"
"email" => "user_petr@intuit.ru")
"semen" => array(
"name" => "Семен Семенович"));
// хто куди запрошується
$who_where["ivan"] = "o" ;
// Іван – на виставку
$who_where["pit"] = "p";
// Петро – на бал
$who_where["semen"] = "f";
// Семен – на день відкритих дверей
?>
Лістинг 3.12. data.php
<?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); */
}
}
?>
Лістинг 3.13. letters.php
Висновок
Отже, ми завершили вивчення управляючих конструкцій язика PHP. Ми прагнули привести саме основне і не заглиблюватися в різні нюанси тих або інших конструкцій. Докладну інформацію можна знайти в керівництві по PHP.
Контрольні питання
-
В чому полягає призначення умовних операторів?
-
Опишіть механізми роботи оператора розгалуження.
-
Які значення перетворюються в FALSE?
-
В чому призначення оператору elseif? Чи можна його чимось замінити?
-
Що таке endif? Де і коли це використовується?
-
Опишіть механізми роботи перемикача switch.
-
Що таке цикл з точки зору мови РНР?
-
Які цикли ви можете назвати?
-
Що спільного в механізмах їх роботи?
-
Які відмінності можна виділити?
-
Що таке оператори передачі управління?
-
В чому полягає їх призначення?
-
Що таке оператори включення? Перерахуйте їх.
-
Як працюють оператори включення?