- •1.4 Варіанти тегів php
- •Конструкції мови if, for, do..While, foreach, while, switch
- •1.6 Коротка інструкція умовного оператора if
- •1.7 Інструкції include, require і інструкції однократного виключення
- •1.8 Оператори echo і print
- •2. 1 Визначення рівності однієї змінної до іншої
- •2.2 Глобальні зміні
- •2.3 Статичні зміні
- •2.4 Використання однієї змінної як посилання на іншу
- •2.4 Використання змінної для зберігання імені іншої змінної
- •Константи
- •3. 1 Одновимірні масиви
- •3.2 Багатовимірні мастви
- •3.3 Суперглобальні масиви і їх використання
- •3.4 Основні функції для роботи з масивом
- •3.5 Сортування масиву
- •4. Робота з рядками
- •4.1 Регулярні вирази
- •4.2 Видалення пробілів
- •4.3 Пошук однакових рядків
- •4.4 Об’єднання рядків
- •Функції для роботи з рядками
- •5. Робота з числами
- •6. Робота з датою
- •7. Функції
- •7.1 Оператор return
- •7.2 Рекурсія
- •7.3 Виклик функції за допомогою імені збереженого в змінній
- •7.4 Передання і повернення значення по посиланню
- •8.1 Класи і модифікатори доступу
- •8.2 Конструктори
- •8.3 Знищення об’єкту
- •8.4 Наслідування
- •9. Обробка web-форм за допомогою php
- •9.1 Отримання даних за допомогою методу post
- •9.2 Отримання даних за допомогою методу get
- •9.3 Організація завантаження даних на сервер
- •10. Робота із файлами та каталогами
- •10.1 Відкриття файлів
- •10.2 Читання файлу
- •10.3 Запис у файл
- •10.4 Копіювання файлів
- •10.5 Видалення файлу
- •10.6 Переіменування файлу
- •11. Робота із сесіями і куксі
- •12. Робота з Базами Даних MySql
- •12.1 З'єднання з бд
- •12.2 Отримання даних із бд
- •13.2 Приклад використання
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);
}
}