Распечатать страницу
Главная \ База готовых работ \ Готовые работы по компьютерным дисциплинам \ WEB-программирование \ 3748. Лекція №8, Настроювання та використання серверних скриптів

Лекція №8, Настроювання та використання серверних скриптів

« Назад

Код роботи: 3748

Вид роботи: Лекція

Предмет: Web-програмування

Тема: №8, Настроювання та використання серверних скриптів

Кількість сторінок: 29

Дата виконання: 2015

Мова написання: українська

Ціна: безкоштовно

1. Огляд мов серверних скриптів

2. Структура мови РНР

1. Огляд мов серверних скриптів

Для того, щоб проста HTML-сторінка ожила, існує кілька технологій. Перший поділ пов'язаний з місцем здійснення цих дій: на сервері або на клієнті. Далі розподіл ведеться по методу програмування: з використанням інтерпритуємих скріптів або відкомпільованих програм. Вищевикладене можна представити у вигляді наступної таблиці:

Сторона клієнта

Сторона сервера

Скріпти

Програми

Скріпти

Програми

  • · JavaScript
  • · JScript
  • · VBScript
  • · Plug-ins
  • · Active
  • · Java applets
  • · Perl
  • · Tcl
  • · командна оболонка (shell)
  • · окремі CGI-програми
  • · модулі сервера
  • · ISAPI/NSAPI
  • · Active
  • · Java servlets

Серверні скріпти належать до серверної частини, але стоять особняком, тому що сполучають у собі властивості як скріптових мов, так і програм.

Мови серверних скриптів

У даній частині ми розглянемо більш докладно найбільш популярні технології серверних скриптів:

- PHP

- Perl,embPerl, Mod_perl

- ColdFusion

- ASP

- Java Server Pages

- WebSQL

• PHP

Головний Web-вузол: http://www.php.net Платформи: Win32, Linux Механізм: окрема CGI-програма, модуль Web-сервера Web-сервера: IIS, Apache Розширення файлів: php, php3, phtml

Досить популярна технологія багато в чому завдяки своїй безкоштовності. Мова скриптів нагадує своїм синтаксисом мову C. Є безліч додаткових бібліотек для роботи з різними базами даних, з документами PDF, з GIF-файлами. Часто PHP поєднується в одне з такою же безкоштовною базою даних як MySQL. Існує безліч провайдерів, що надають хостинг зі зв'язкою Apache/PHP/MySQL. у цей час розроблювачі PHP стверджують, що ця мова використається на 1.000.000 вузлах.

* * *

• embPerl

Головний Web-вузол: http://perl.apache.org/embperl/ Платформи: Linux, Win32 Механізм: окрема CGI-програма, модуль Web-сервера Web-сервера: IIS, Apache

В HTML-сторінки уставляються скріпти на вже знайомій вам мові Perl. Це значить, що для використання вам не доведеться як у випадку з ColdFusion або PHP вивчати нову мову. Технологія безкоштовна. Має зв'язки з популярними базами даних.

* * *

• mod_perl

Головний Web-вузол: http://perl.apache.org/ Платформи: Linux, Win32 Механізм: модуль Web-сервера Web-сервера: Apache

Ідея та ж, що й в embPerl, тільки в цьому випадку інтерпретатор Perl-а "зашивається" у середину Web-сервера Apache. Це природно підвищує швидкість роботи. Технологія безкоштовна.

* * *

• ColdFusion

Головний Web-вузол: http://www.allaire.com/Products/Coldfusion/ Розроблювач: Allaire, Inc. Платформи: Win32, Linux (починаючи з версії 4.5) Механізм: окрема CGI-програма Web-сервера: IIS, PWS Розширення файлів: cfm

Технологія є комерційною. Є свій власний засіб розробки сторінок з убудованими скріптами мовою ColdFusion - ColdFusion Studio - клон HomeSite. На платформі Win32 зв'язується з базами даних стандартними засобами Windows через ODBC.

* * *

• ASP

Головний Web-вузол: http://www.microsoft.com Розроблювач: Microsoft Платформи: Win32 Механізм: убудований модуль для Web-сервера Web-сервера: IIS Розширення файлів: asp

Потужна технологія, яку просуває посилено Microsoft. Шкода тільки, що працює вона на повну силу тільки на продуктах того ж Microsoft. Синтаксис скріптів нагадує VBScript/VBA. Інтеграція з операційною системою набагато більш тісна, чим в інших технологіях, що дозволяє витворяти на ASP такі речі, які, мабуть, неможливі за допомогою інших мов. Підтримує роботу з базами даних.

* * *

• JSP (Java Server Pages)

Головний Web-вузол: http://java.sun.com/products/jsp/ Розроблювач: Sun Розширення файлів: jsp

[опис буде пізніше]

Існує проект по створенню безкоштовного варіанта JSP - GNUJSP.

* * *

• WebSQL

2. Структура мови РНР

Програми PHP можуть виконуватися двома способами: як сценарний додаток Web-сервером і як консольні програми. Оскільки, нашим завданням є програмування web-додатків, ми переважно розглядатимемо перший спосіб.

Річ у тому, що на PHP, як правило, використовується суто для програмування додатків, пов'язаних з Інтернетом. Проте, PHP можна ще використовувати як інтерпретатор командного рядка, в основному в *nix-системах. Останнє можливо за допомогою CORBA і COM інтерфейсів, а також за допомогою розширення PHP-GTK. При такому використанні PHP можливо рішення наступних задач:

- створення додатків інтерактивного командного рядка;

- створення крос-платформенних GUI додатків за допомогою бібліотеки PHP-GTK;

- автоматизація деяких завдань під Windows і Linux

Розглянемо процес виконання php-сценарію при зверненні браузера до сервера. Отже, спочатку браузер запрошує сторінку з розширенням.php, після чого web-сервер пропускає програму через машину PHP і видає результат у вигляді html-коду. Причому, якщо узяти стандартну сторінку HTML, зрадити розширення.php і пропустити її через машину PHP, остання просто перешле її користувачу без змін. Щоб включити в цей файл команди PHP, необхідно укласти команди PHP в спеціальні теги, яких розрізняють 4 види (вони еквівалентні і можна використовувати будь-які при ввімкнених відповідних опціях в рhр.):

1. Інструкція обробки XML:

...

2. Інструкція обробки SGML:

<?

...

3. Інструкція обробки сценаріїв HTML:

<script language = "php">

...

</script>

4. Інструкція в стилі ASP:

<%

...

%>

Ми дотримуватимемося стилю XML або SGML.

Взагалі кажучи, усередині якого-небудь блоку коду можна вийти з PHP, за умови, що далі ми увійдемо до нього знову і закінчимо код. Тобто, можлива наступна конструкція:

<?

if(5<3){

echo("<p>Hello, world!<p>");

<p>Hello!</p>

// цей рядок не інтерпретується як код PHP

// і виводиться тільки якщо блок коду виконується

<?

echo("<p>Hello, world!<p>");

}

Команда echo в PHP застосовується для виводу фактично всього, що зустрічається на web-сторінках (текст, розмітку HTML, числа). Сенс її дії, ми думаємо, зрозумілий з приведеного прикладу

Коментарі

PHP надає декілька методів для вставки коментарів. Простіше всього користуватися подвійним слешем (//), після чого PHP машина ігнорує все, що розташовано до кінця рядка. Також можна користуватися багаторядковими коментарями в стилі С (/*.*/). Для однорядкових коментарів можна ще користуватися символом грат (#) (коментар скриптових мов UNIX).

<php

echo("<p>Hello</p>"); // коментар

echo("<p>Hello</p>"); # коментар

/*

і це теж коментарі

*/

Слід пам'ятати про те, що стилі коментарів PHP діють тільки усередині обмежувачів PHP. Якщо PHP зустріне ці символи коментарів поза обмежувачами, то вони, як і будь-який текст, будуть поміщені на html-сторінку. Наприклад:

<php

echo("<p>Hello</p>"); // нормальний коментар

// а ось цей коментар відобразитися brouzerom.

<!-- Коментар HTML.

Буде видно в початковому коді HTML, але не в Brauzere -->

Відмітимо, що коментарі можна вставляти не тільки після кінця оператора, а, наприклад, і ось так:

<?

$a = "Hello, world";

echo strstr($a,"H");

// цю функцію ми розглянемо пізніше

Змінні.

У РНР змінні починаються із знаку долара ($). За цим знаком може слідувати будь-яка кількість буквено-цифрових символів і символів підкреслення, але перший символ не може бути цифрою або підкресленням. Слід також пам'ятати, що імена змінних в РНР чутливі до регістра, на відміну від ключових слів.

При оголошенні змінних в РНР не потрібно явно указувати тип змінної, при цьому одна і та ж змінна може мати впродовж програми різні типи.

Змінна ініціалізувалася у момент привласнення їй значення і існує до тих пір, поки виконується програма. Тобто, у разі web-сторінки це означає, що до тих пір, поки не завершений запит.

Зовнішні змінні

Після того, як запит клієнта проаналізований web-сервером і переданий РНР машині, остання встановлює ряд змінних, які містять дані, що відносяться до запиту і доступні весь час його виконання. Спочатку РНР бере змінні оточення Вашої системи і створює змінні з тими ж іменами і значеннями в оточенні сценарію РНР для того, щоб сценаріям, розташованим на сервері були доступні особливості системи клієнта. Ці змінні поміщаються в асоціативний масив $HTTP_ENV_VARS.

Природно, що змінні масиву $HTTP_ENV_VARS є системно залежними (оскільки це фактично змінні оточення). Подивитися значення змінних оточення для Вашої машини Ви можете за допомогою команди env (Unix) або set (Windows).

Потім РНР створює групу GET-змінних, які створюються при аналізі рядка запиту. Рядок запиту зберігається в змінній $QUERY_STRING і є інформацією, наступною за символом "?" у запитаному URL. РНР розбиває рядок запиту по символах & на окремі елементи, а потім шукає в кожному з цих елементів знак "=". Якщо знак "=" знайдений, то створюється змінна з ім'ям з символів, що стоять зліва від знаку рівності. Розглянемо наступну форму:

<form action = "http://localhost/PHP/test.php" method="get">

HDD: <input type="text" name="HDD"/><br>

CDROM: <input type="text" name="CDROM"/><br>

<input type="submit"/>

Якщо Ви в цій формі в рядку HDD наберете, наприклад, "Maxtor", а в рядку CDROM "Nec", то вона згенерує наступну форму запиту:

http://localhost/PHP/test.php?HDD=Maxtor&CDROM=Nec

У нашому випадку РНР створить наступні змінні: $HDD = "Maxtor" і $CDROM = "Nec".

Ви можете працювати з цими змінними з Вашого скрипта (у нас - test.php) як із звичайними змінними. У нашому випадку вони просто виводяться на екран:

<?

echo("<p>HDD is $HDD</p>");

echo("<p>CDROM is $CDROM</p>");

Якщо запит сторінки виконується за допомогою методу POST, то з'являється група POST-змінних, які інтерпретуються також і поміщаються в масив $HTTP_POST_VARS.

Константи

Константи оголошуються в РНР за допомогою функції define():

define(CONSTANT, value)

Перший параметр цієї функції - ім'я константи, другої - її значення. При використанні константи на неї посилаються по імені:

<?

define(CONSTANT1,15);

define(CONSTANT2,"x20"); // код пропуску

define(CONSTANT3,"Hello");

echo(CONSTANT1);

echo(CONSTANT2);

echo(CONSTANT3);

За традицією імена констант пишуть буквами верхнього регістра. І хоча це тільки традиція, ми Вам рекомендуємо їй слідувати, оскільки погані програмісти виходять у тому числі і з тих, хто не слідував хорошим традиціям. Існує функція defined(), яка перевіряє, чи визначена константа:

<?

define(CONSTANT,"Hello");

if(defined("CONSTANT"))

{

echo("<p>CONSTANT is defined</p>");

}

Типи даних в РНР. Перетворення типів

Як вже було сказано, PHP надає певну гнучкість відносно типів змінних, тобто з однією і тією ж змінною впродовж програми можна працювати і як з рядком, і як з числом. Проте, не дивлячись на це в РНР існують набір основних типів даних, які можуть явно указуватися при роботі із змінними:

· integer;

· string;

· boolean;

· double;

· array;

· object;

Є функція gettype(), що повертає тип, який РНР призначив змінною:

<?

$var = "5";

$var1 = 5;

echo(gettype($var));

echo "<br>";

echo(gettype($var1));

Подивитись

У першому випадку РНР поверне string, в другому integer.

Існує також функція settype(), яка явно встановлює тип:

<?

$var = "5";

echo(gettype($var));

settype($var,integer);

echo "<br>";

echo(gettype($var));

Подивитись

Виконання цього фрагмента коду приведе до такого ж результату, як і попереднього.

Окрім функції settype() перетворення типів в РНР можна здійснювати за допомогою операторів перетворення типів. Перетворення типів здійснюється шляхом вказівки перед змінною її нового типа, узятого в дужки:

$var = (int)$var;

Відповідно, виконання наступного коду приведе до того, що РНР поверне integer:

<?

$var = "5"; // тип string

$var = (int)$var; // перетворюваний в int

echo(gettype($var));

Оператори

Арифметичні оператори

+ Складання

- Віднімання

* Множення

/ Ділення

%О бчислення залишку по модулю (наприклад: 5 % 2=1)

Порозрядні оператори

Ця група операторів працює з бітовими представленнями значень цілочисельних операндів. В основному ці оператори застосовуються для створення набору булевих прапорів. У наших вправах ми використовуватимемо цих операторів дуже рідко, проте про всяк випадок нижче приведений приклад з використанням цих операторів.

& Порозрядна кон'юнкція (AND)

| Порозрядна диз'юнкція (OR)

^ Порозрядне виключення АБО (XOR)

~ Порозрядне заперечення (NOT)

<< Зсув вліво бітового представлення значення лівого цілочисельного операнда на кількість розрядів, рівну значенню правого цілочисельного операнда

>> Зсув управо бітового представлення значення лівого цілочисельного операнда на кількість розрядів, рівну значенню правого цілочисельного операнда

Приклад:

<?

echo(4<<2); // рівне 16

echo"<br>";

echo(5>>1); // рівне 2

echo"<br>";

echo(6&5); // рівне 4

echo"<br>";

echo(6|5); // рівне 7

echo"<br>";

echo(6^5); // рівне 3

>?

Розберемо перший приклад. Двійковий код для 4 рівний 100, при зсуві вліво на 2 розряди код 100 стає рівним 10000, що відповідає десятковому значенню 16. Решта прикладів може бути розібрана аналогічно. Звернемо увагу на те, що зсув вліво на n позицій еквівалентне множенню на 2n, а зрушення управо зменшує відповідне значення в 2n разу з відкиданням дробової частини результату (тому 5>>1 рівне 2). Основне призначення цих операторів - швидкі обчислення. Оскільки їх підтримка здійснюється на апаратному рівні (процесор), алгоритми, виконані з використанням даних операторів виходять дуже продуктивними.

Логічні оператори

or або || АБО

Xor виключаюче АБО

and або && І

! НЕ

Оператори цієї групи, на відміну від порозрядних, працюють з логічними змінними (boolean) і інтенсивно використовуються в конструкціях, що управляють: цикли і умови. Логічні змінні, або правильніше, змінні типу Boolean мають лише два значення: true(істина) і false(брехня). У виразах true і false можна замінити на 1(будь-яке відмінне 0 число) і 0, відповідно. Можливість заміни true і false на 1 і 0 - це «спадок» мови С, в якому не було спеціальних змінних true і false.

Логічно оператори для змінних типу Boolean виконують роль операторів складання, віднімання для звичайних змінних. Розглянемо декілька прикладів, якщо їх сенс Вам не дуже зрозумілий - не турбуйтеся, просто поверніться сюди, прочитавши наступні розділи. Оператор if(cond) перевіряє умову cond, якщо його значення true - виконується код у фігурних дужках, наступний за if, якщо false - код після оператора else. Якщо cond рівний false - все навпаки.

<php

$flag = true; // Істина

if($flag)

{

echo "<p>Змінна flag має значення true</p>";

} else {

echo "<p>Змінна flag має значення false</p>";

}

Результати роботи скрипта виглядають таким чином:

Змінна flag має значення true

Якщо тепер замінити строчку

$flag = true; // Істина

на

$flag = false; // Брехня

Результат, що видається тегом змінитися:

Змінна flag має значення false

Тобто ми зайшли в блок else, оскільки в операторі if умова помилково.

Коли умова одне, як бачите, все просто. Коли умов більше - в справу вступають логічні оператори:

<php

$flag1 = true; // Істина

$flag2 = true; // Істина

if($flag1 && $flag2) // І $flag1 І $flag2 істини

{

echo "<p>Умова: true (Обидва прапори істини)</p>";

// Так

} else {

echo "<p>Умова: false (Один з прапорів помилковий)</p>";

// Ні, один або обидва помилкові

}

Цей скрипт виведе: Умова: true (Обидва прапори істини). Якщо хоч би один з операторів виявиться рівним false (або обидва відразу) - буде виведено: Умова: false (Один з прапорів помилковий).

Обов'язково спробуйте пограти з умовами: якщо ви не розбиратиметеся в умовних операторах - Ви ніколи не будете хорошим програмістом ні на одній мові програмування. Якщо Ви вважаєте, що Вам не потрібні умовні оператори - Вам не потрібна мова програмування.

Замінимо && (И) на || (АБО)

<php

$flag1 = true; // Істина

$flag2 = false; // Істина

if($flag1 || $flag2)

// Хоч хтось з двох прапорів($flag1 $flag2) істинний

{

echo "<p>Умова: true (Один з прапорів істин)</p>";

// Так

} else {

echo "<p>Умова: false (Обидва прапори помилкові)</p>";

// Немає обидва мають значення false

}

Знову одержуємо: Умова: true.

Для І і АБО, як бачимо, можливі два варіанти операторів, причому ці оператори з різними пріоритетами. Пріоритетність виконання логічних операторів: or > xor > and > || > && > ! Іноді в умовах зручно використовувати дужки для явного завдання приорітету:

<php

$flag1 = true;

$flag2 = true;

$flag3 = false;

if( $flag1 && $flag2 || $flag3)

{

echo "<p>Умова істинна<p>";

}

else

{

echo "<p>Умова не правдива<p>";

}

Результатом буде виведення фрази «Умова істинно», оскільки згідно пріоритету виконання спочатку виконується оператор &&, оскільки обидва прапори рівні true - повертається true, потім цей вираз порівнюється з $flag3 (true || $flag3) - що повертає теж true, оскільки одне з порівнюваних рівне true.

Якщо ж ми запишемо

<php

$flag1 = true;

$flag2 = true;

$flag3 = false;

if($flag1 && ($flag2 || $flag3))

{

echo "<p>Умова істинна<p>";

}

else

{

echo "<p>Умова фальшива<p>";

}

результатом буде «Умова помилкова».

Взагалі програмісти не люблять запам'ятовувати порядок пріоритетів, тому для того, щоб Ваш код легко читався (у тому числі і Вами) краще завжди використовувати дужки. Тобто в першому скрипті краще записати if(($flag1 && $flag2) || $flag3) - тоді відразу стане зрозуміло, що є за чим.

Іноді потрібно перевірити умову безальтернативно, наприклад, на помилковість або істинність. Припустимо, функція (func()) повертає істину або брехню і залежно від цього потрібно вивести на сторіночку той або інший Teг. Наприклад, функція mysql_query($query) - повертає true якщо запит до бази даних mySQL, розміщений в рядку $query успішно виконався і false - інакше.

Якщо Вам потрібно зреагувати тільки на вдале звернення, Ви можете записати:

<php

if(mysql_query($query))

{

echo "<p>Данные успішно занесені в базу даних.<p>";

}

Якщо Вам потрібно зреагувати тільки на не вдалі звернення, Ви, звичайно, можете записати:

<php

if(mysql_query($query))

{

else

{

echo"<p>Данные не були занесені в базу даних.<p>";

}

Але це не елегантний, заплутуючий спосіб - тут самий час скористатися оператором заперечення: !, застосування якого до змінної міняє її значення з true на false, а false на true:

<php

if(!mysql_query($query))

{

echo"<p>Данные не були занесені в базу даних.<p>";

}

Оператори вибора/ if...else

До операторів вибору відносять: умовний оператор (if...else) і перемикач (switch). Синтаксис умовного оператора: if(condition) statement 1 else statement 2

Умова condition може бути будь-яким виразом. Якщо воно істинно, то виконується оператор statement 1. Інакше виконується оператор statement 2. Допустима скорочена форма запису умовного оператора, в якому відсутні else і оператор statement 2.

У свою чергу, оператори statement 1 і statement 2 можуть бути умовними, що дозволяє організовувати ланцюжки перевірок будь-якої глибини вкладеності. І в цих ланцюжках кожен умовний оператор може бути як повним, так і скороченим. У зв'язку з цим можливі помилки неоднозначного зіставлення if і else.

Синтаксис мови припускає, що при вкладених умовних операторах кожне else відповідає найближчому if. Як такий помилковий приклад можна привести наступну конструкцію [Подбельській в.в. Мова С++. М.:Финансы і статистика, 2001]:

<?

$x = 1;

$y = 1;

if($x == 1)

if($y == 1)echo("x=1 and y=1");

else echo("x!=1");

При х рівному 1 і у рівному 1 абсолютно справедливе друкується фраза «х = 1 and у = 1». Проте фраза «х != 1» може бути надрукована при х рівному 1 і при у не рівному 1, оскільки else відповідає найближчому if. Зовнішній умовний оператор, де перевіряється $x == 1, є скороченим і як statement 1 включає повного умовного оператора, де перевіряється умова $у == 1. Тобто перевірка цієї умови виконується тільки при х рівному 1. Простим правильним рішенням цієї задачі є застосування фігурних дужок, тобто побудова складеного оператора, тобто нам потрібне фігурними дужками обмежити область дії внутрішнього умовного оператора, зробивши його неповним. Тим самим зовнішній оператор перетворюється на повний умовний:

<?

$x = 1;

$y = 1;

if($x==1)

{

if($y==1)echo("x=1 and y=1");

}

else echo("x!=1");

Відмітимо, що перевірка додаткових умов можлива за допомогою оператора elseif. Оператор if може включати скільки завгодно блоків elseif, але else в кожному if може бути тільки один. Як правило, в конструкціях if.elseif.else оператор else визначає, що потрібно робити, якщо ніякі інші умови не є true. Проте, взагалі кажучи, використання оператора elseif досить сильно погіршує читабельність коду, і краще в цьому випадку користуватися перемикачем (switch).

РНР надає також можливість альтернативного синтаксису умовного оператора - без фігурних дужок, а із застосуванням оператора endif. У наступному прикладі перша таблиця поміщається на сторінку, якщо тільки $HDD рівне «Maxtor», а друга - якщо «Seagate». Наявність оператора endif в цьому випадку обов'язково, оскільки фігурна дужка, що позначає кінець блоку if, відсутня:

<?

 if($HDD == «Maxtor»):

<table>

<caption> Maxtor </caption>

</table>

<?

elseif($HDD == «Seagate»):

<table>

<caption> Seagate </caption>

</table>

<?

endif;

Результат виконання скрипта:

Форма запиту

Результат виконання скрипта

Значення змінної $HDD передається формою test.html скрипту test.php. Код форми test.html:

<form action = "http://localhost/PHP/test.php;" method="get">

HDD: <input type="text" name="HDD"/><br>

<input type="submit"/>

</form>

РНР також, як і С++, Java надає можливість замінювати блоки if.else умовною операцією (на відміну від унарних і бінарних операцій умовна операція використовується з трьома операндами). У зображенні умовної операції присутні два розміщених не підряд символу ‘?’ і ‘:’ і три операнди виразу:

вираз_1 ? вираз_2: вираз_3

Першим обчислюється значення вираз_1. Якщо воно істинно (тобто не рівно нулю), то обчислюється значення вираз_2, яке і стає результатом. Якщо при обчисленні значення вираз_1 вийде нуль (брехня), то як результат береться вираз_3. Класичним прикладом умовної операції є вираз

x < 0 ? -х: x;

Цей вираз повертає абсолютне значення зміною x. Тобто, наприклад, код

<?

if($HDD == "Maxtor")

{

$CDROM = "Teac";

}

else

{

$CDROM = "Nec";

}

можна, використовуючи умовну операцію, замінити таким:

<?

$CDROM = ($HDD == "Maxtor") ? "Teac": "Nec";

Проте якщо Ви не хочете комусь глибоко і надовго запудрити мізки, зловживати такими записами навряд чи стоїть, оскільки код стає, м'яко кажучи, нечитабельним. І взагалі, чим простіше - тим краще.

Оператори выбора/ Перемикач switch

Перемикач switch є найбільш зручним засобом для організації мультирозгалужень. Синтаксис перемикача такий:

switch(expression) // перемикальний вираз

{

case value1: // константний вираз 1

statements; // блок операторів

break;

case value2: // константний вираз 2

statements;

break;

default:

statements;

}

Структура switch, що управляє, передає управління тому з помічених case операторів, для якого значення константного виразу співпадає із значенням перемикального виразу. Якщо значення перемикального виразу не співпадає ні з одним з константних виразів, то виконується перехід до оператора, поміченого міткою default. У кожному перемикачі може бути не більше однієї мітки default, проте вона може бути відсутньою взагалі. Приведемо приклад програми з перемикачем. У цій програмі виводяться назви непарних цілих десяткових цифр від 1 до 9 за не менше задану, залежно від числа, вказаного у формі test.html. Форма test.html не відрізняється від тієї, що ми вже використовували:

<form action = "http://localhost/PHP/chapt2/switch.php" method="get">

 number: <input type="text" name="number"/><br>

 <input type="submit"/>

</form>

<?

switch($number)

{

case 1:

echo ("one ");

case 2: case 3:

echo ("free");

case 4: case 5:

echo ("five");

case 6: case 7:

echo ("seven");

case 8: case 9:

echo ("nine");

break;

default:

echo ("This isn't number or number is > 9 or < 1");

}

Результат виконання скрипта:

Форма запиту

Результат виконання скрипта

Так само, як і у разі умовного оператора для перемикачів допустимі будь-які ступені вкладеності, проте зловживати цим персоною на те необхідності також не слід.

Окрім вже сказаного про перемикач, приведена програма демонструє дію оператора break, за допомогою якого відбувається вихід з перемикача. Якщо помістити операторів break після виведення кожної з цифр, то у вікні браузера ми побачимо назву тільки однієї непарної цифри.

Як бачимо, після конструкції switch приведений складений оператор, проте це абсолютно не обов'язково - після switch може знаходитися будь-який оператор, помічений службовим словом case.

Нагадаємо, що складений оператор, це увязнена у фігурні дужки послідовність операторів.

Відмітимо також, що в PHP як мітки case можуть використовуватися не тільки літерали, але і самі мітки можуть бути змінними. Як мітки case в PHP не можуть виступати тільки масиви і об'єкти.

Оператори циклу

Оператори циклу задають багатократне виконання операторів в тілі циклу. У PHP визначені 4 різних оператора циклу:

· цикл з передумовою:

· while(condition)

· {

· statements;

· }

· цикл з умовою поста:

· do

· {

· statements;

· } while(condition);

· ітераційний цикл:

· for(expression1;expression2;expression3)

· {

· statements;

· }

· ітераційний цикл foreach:

· foreach (array as [$key =>] $value)

· {

· statements;

· }

Якщо 3 перших оператора циклу беруть свій початок від С-подобних мов, то останній оператор pozaymstvovan у мови Perl (до речі, цикл foreach ми розберемо пізніше - у розділі 4, присвяченої масивам).

Оператори цикла/ While

Оператор while називається оператором циклу з передумовою. При вході в цикл обчислюється вираз умова, і, якщо його значення відмінно від нуля, виконується тіло циклу. Потім обчислення виразу умови і операторів тіла циклу виконується до тих пір, поки значення виразу умови не стане рівним нулю. Оператором while зручно користуватися для проглядання всіляких послідовностей, якщо в кінці їх знаходиться наперед відомий символ. (Це дуже зручно в C++, наприклад для визначення довжини рядка, оскільки в С++, за визначенням, рядок є послідовність символів типу char, що закінчується нульовим символом).

Приклад простого циклу while:

<?

$var = 5;

$i = 0;

while(++$i <= $var)

{

echo($i); echo('<br>');

}

Цей код видає у вікні браузера цифри від одного п'яти:

1 2 3 4 5

Для виходу з циклу застосовується оператор break. При виявленні цього оператора поточна ітерація циклу припиняється, і подальші ітерації не відбуваються. При виконанні наступного прикладі, не дивлячись на те, що змінна $var = 7, у вікні браузера з'являться цифри від 1 до 5.

<?

$var = 7;

$i = 0;

while(++$i <= $var)

{

echo($i);

echo('<br>');

if($i==3)break;

}

Іноді буває потрібно перервати тільки поточну ітерацію, і перейти відразу до наступної. Для цього застосовується оператор continue:

<?

$var = 7;

$i = 0;

while(++$i <= $var)

{

if($i==5)

{

continue;

}

echo($i);

echo('<br>');

}

В даному прикладі виводяться цифри від 1 до 7, окрім цифри 5:

1 2 3 4 6 7

Відмітимо, що якщо Ви умовного оператора поставите після операторів echo, код буде помилковим, і виведуться всі цифри від 1 до 20, оскільки перевірка умови виходу з циклу на даній ітерації, відбуватиметься вже після виконання цієї ітерації.

Нескінченний цикл реалізується за допомогою оператора while таким чином:

while(1)

{

...

}

Це теж саме, що і запис while(true).

Оператори цикла/ Do.while

Цей оператор називається оператором циклу з умовою поста. При вході в цикл у будь-якому випадку виконується тіло циклу (тобто цикл завжди буде виконаний хоч би один раз), потім обчислюється умова, і якщо воно не рівне 0, знов виконується тіло циклу. У нижченаведеному прикладі нуль завжди буде доданий в список, незалежно від умови (++$i <= $var):

<?

$var = 5;

$i = 0;

do

{

echo($i); echo('<br>');

}

while(++$i <= $var)

Результат:

1 2 3 4 5

Цикл з умовою поста корисний при обробці деяких послідовностей, коли обробку потрібно закінчувати не до, а після появи кінцевої ознаки.

Нескінченний цикл реалізується так:

do; while(1);

Оператори цикла/ For

Як вже мовилося, ітераційний цикл має наступний формат:

for(expression1;expression2;expression3)

{

statements;

}

Тут expression1 (ініціалізація циклу) - послідовність визначень і виразів, що розділяється комами. Всі вирази, що входять в ініціалізацію, обчислюються тільки один раз при вході в цикл. Як правило, тут встановлюються початкові значення лічильників і параметрів циклу. Сенс виразу-умови (expression2) такої ж як і у циклів з pred- і умовами поста. За відсутності виразу-умови передбачається, що його значення завжди істинне. Вирази expression3 обчислюються в кінці кожної ітерації після виконання тіла циклу.

У наступному скрипті, ми за традицією виведемо числа від 0 до 5:

<?

$var = 5;

$i = 0;

for ($i = 0; $i <= $var; $i++)

{

echo($i);

echo('<br>');

}

Результат аналогічний, показаному на попередньому малюнку.

Нескінченний цикл можна організувати таким чином:

for(;;);

або

for(;1;);

Строкові функції PHP

Не дивлячись на те, що цей розділ написаний швидше у дусі довідника, матеріал, викладений в ній, достатньо серйозний, хоч і не найскладніший для розуміння. Уміння грамотно працювати з рядками дуже важливо для програміста. Строкових функцій в PHP немало, причому багато хто з них, так або інакше, просто дублює один одного. Проте, прийоми роботи з основними блоками функцій (функції пошуку і заміни в тексті, функції видалення пробільних символом (trim-функції), функції висновку, формату) треба представляти дуже чітко.

Взагалі кажучи, за визначенням, рядок - це послідовність символів типу char, яка закінчується нульовим символом. Тому, можна, звичайно, радіти тому, що при роботі з рядками, нам не доводиться жонглювати покажчиками в стилі C/C++, проте не варто забувати про те, що ціна цій зручності - швидкодія. Тому деякі функції, що приводяться тут, ми обговорюватимемо у тому числі і з погляду їх швидкодії