Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гамоцька / Zvit_4lab.docx
Скачиваний:
4
Добавлен:
23.02.2016
Размер:
166.55 Кб
Скачать

7. Цикл for each

Даний тип циклу призначений спеціально для перебору всіх елементів масиву і був доданий тільки в четвертій версії мови РНР. Виглядає він таким чином:

foreach (масив as $key=>$value)

команди;

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

Розглянемо приклад як можна відобразити вміст всіх глобальних змінних

за допомогою for each:

foreach ($GLOBALS as $k=>$v)

echo "<b>$k</b> => <tt>$v</ttxbr>\n";

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

foreach (масив as $value)

команди;

В цьому випадку доступне лише значення чергового елементу масиву, але

не його ключ. Це може бути корисно, наприклад, для роботи з масивами- списками.

Цикл foreach оперує не початковим масивом, а його копією. Це означає, що будь-які зміни, які вносяться до масиву, не можуть бути "видимі" з тіла циклу. Це дозволяє, наприклад, використовувати як масив не тільки змінну, але і результат роботи деякої функції, що повертає масив. В цьому випадку функція буде викликана всього один раз — до початку циклу, а потім робота проводитиметься з копією поверненого значення.

8. Конструкція swith-case

Часто замість декількох розміщених підряд інструкцій if-else доцільно скористатися спеціальною конструкцією switch-case:

switch(вираз){

case значення1: команди1; [break;]

case значение2: командu2; [break;]

………

case значенняN: командuN; [break;]

[default: команди_по_умолчанню; [break]]

}

Працює ця конструкція таким чином: обчислює значення виразу (нехай воно рівне, наприклад, v), а потім намагається знайти рядок, що починається з case v:. Якщо такий рядок знайдено, виконуються команди, розміщені відразу після нього (причому на всі подальші оператори case дещо: увага не звертається, неначе їх немає, а код після них залишається без змін). Якщо ж знайти такий рядок не вдалося, виконуються команди після default (коли вони задані).

Зверніть увагу на оператори break (які умовно розміщені в квадратні дужки, щоб підкреслити їх необов'язковість), що стоять після кожного рядка команд, окрім останнього (для якого можна було б теж вказати break, однак це не має сенсу). Коли б не вони, то при рівності у=значення1 спрацювали б не тільки команди1, але і всі інші, що знаходяться нижче.

Ось альтернативний синтаксис для конструкції switch-case:

switch(вираз):

case значення1: команди1; [break;]

………

case значенняN: командuN; [break;]

[default: команди_по_умолчанню; [break]]

endswitch;

12. Відкриття файлів

Основна функція при роботі з файлами – це відкриття файлів. В РНР файли відкриваються за допомогою функції fopen(). Дану функцію можна використовувати для відкриття будь-якого файлу у файловій системі сервера або через HTTP або FTP в Інтернеті:

int fopen(string filename, string mode);

В наведеному прикладі аргумент filename є ім'ям файлу, що відкривається; аргумент mode указує на режим, в якому повинен бути відкритий файл (для читання, запису або доповнення). Цей аргумент може мати одне з наступних значень:

Таб. 1

Значення

Опис

a

Відкрити файл тільки для доповнення. Дані будуть дописані в

кінець існуючого файлу. Якщо файл не існує, РНР намагається

створити його.

a+

Відкрити файл для доповнення і читання. Дані будуть дописані в

кінець існуючого файлу. Якщо файл не існує, РНР намагається

створити його.

r

Відкрити файл тільки для читання.

r+

Відкрити файл для читання і запису. Дані будуть записані в

початок існуючого файлу.

w

Відкрити файл тільки для запису. Існуючий вміст файлу буде

втрачений. Якщо файл не існує, РНР намагається створити його.

w+

Відкрити файл для читання і запису. Існуючий вміст файлу буде

втрачений. Якщо файл не існує, РНР намагається створити його.

Зверніть увагу, що файли з URL HTTP можуть відкриватися тільки для читання. Проте файли можна відправляти через FTP, хоча їх не можна відкривати одночасно для читання і запису.

До цих значень можна додати прапор b, який вказує на те, що файл треба обробляти як двійковий (бінарний), а не як текстовий (наприклад, якщо це графічний файл). Якщо (як в системах Unix) між двійковими і текстовими файлами не робиться відмінності, це значення просто ігнорується.

При успішному виконанні функція fopen() повертає дескриптор файлу (file handle) - ціле число, що дозволяє посилатися на файл при подальших викликах функцій; при невдачі функція fopen() повертає false:

if (!$file=fopen("picture.gif", "rb")) {

echo("Неможливо відкрити файл "); // Якщо fopen() повертає Про

// неможливо відкрити файл } else {

fpassthru($file); // Вивести зображення

}

Функція fpassthru(), яка використана в прикладі, призначена для

виведення зображення.

13. Закриття файлів

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

int fclose(int fp);

Єдиний параметр цієї функції – це дескриптор файлу, що закривається, і у випадку успішного закриття файлу вона повертає true, а у випадку невдачі - false.

Соседние файлы в папке Гамоцька