Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP_Барчук_довідник.doc
Скачиваний:
3
Добавлен:
31.08.2019
Размер:
1.14 Mб
Скачать

7. Функції

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

Функція викликається на ім'я в різних точках програми, що дозволяє багаторазово виконувати фрагмент із зазначеним ім'ям.

Перевага такого рішення полягає в тому, що блок коду пишеться всього один раз, а потім легко модифікується в міру необхідності.

Синтаксис:

function nameFunc(<параметри>){

//тіло функції

Return();

}

, де nameFunc є ім’ям функції за допомогою якого можливо викликаті її в програмному коді, <параметри> є не обов’язковими і вони використовуються у тілі функції, а оператор return повертає заначення функції.

7.1 Оператор return

Наша функція не зобов'язана щось повертати конструкцією return. Можливо, вона просто виконує ряд операцій, наприклад, виведення декількох рядків або ще що-небудь. Наприклад:

<?php

function who_is_it($sName) {    if($sName=="EuGen")  echo("Да, это я");    elseif($sName=="Valenok")  echo("Теперь я точно уверен, это Не Я");    elseif($sName=="Champion") echo("Это тоже наш автор, Champion");    else  echo("Я запутался.."); }

$val = 'Valenok';   who_is_it($val);  $eu = 'EuGen';      who_is_it($eu); $ch = 'Champion';   who_is_it($ch); $unknown = 'Guest'; who_is_it($unknown);

?>

Ми не просили функцію що або повертати. У такому випадку інтерпретатор повертає значення Null. Але буває, що одне повернутого значення не вистачає. Також можливо, що ви хочете, щоб зміни, що відбулися з змінними у функції відбилися і в основній програмі. Для цього можна скористатися двома рішеннями. Або змусити нашу підпрограму побачити змінну ззовні, або передати їй оригінал параметра замість копії. Поставивши значок & перед змінною, ми вкажемо інтерпретатору що ми передаємо не саму змінну, а посилання на змінну. По суті це можна розуміти як тип Resource. Функція буде вже працювати не з копією даних у пам'яті, а безпосередньо з певною осередком в пам'яті. Таким образів всі зміни будуть записані прямо в потрібний нам ділянку оперативної пам'яті і зміни збережуться. Нехай функція повертає суму 2 доданків, в перший параметр запишеться твір, а другий параметр просто подвоїться.

7.2 Рекурсія

Рекурсія - це звернення функції до самої себе. Багато хто не розуміє, як же використовувати рекурсію на практиці - мовляв, "що за безглуздя, функція звертається сама до себе ... Цього не повинно бути!". Дійсно, здається дивно і незручно. Ну що ж, розберемо реальний випадок. Припустимо, нам необхідно вибудувати дерево записів з бази даних, кожен з яких має такі параметри:

| uid | ім’я запису | uid батьківського запису |

Для цього просто можемо написат такий приклад коду:

$s = mysql_query("SELECT * FROM x_table WHERE parent_id=0", $conn);

while ($z = mysql_fetch_array($s)) { ...

$x = mysql_query("SELECT * FROM x_table WHERE parent_id=".$z["uid"], $conn);

while ($f = mysql_fetch_array($x)) {

... }

}

Але ж кількість рівнів вкладеності може бути необмеженим! Виходить, кількість циклів буде нескінченним, довжина коду буде нескінченною . Тобто зробити нічого не вийде. Як же бути. Деякі програмісти просидять над цим завданням досить довго. Звичайно, можна зробити 100 циклів, в надії, що такої глибокої вкладеності записів не буде. А якщо буде? До того ж код з 100 циклами буде поганочитаємих, довгим і дуже об'ємним. Ну а якщо там з'явиться невелика помилка ...

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

function tree($uid, $conn){

$sql = "SELECT * FROM x_table WHERE parent_id=$uid"; $a = mysql_query($sql, $conn);

while($x = mysql_fetch_array($a)){

.... какие-то действия...

tree($x["uid"], $conn);

}

}

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