06 Курс PHP (functions).ppt
- Количество слайдов: 26
КУРС PHP ФУНКЦІЇ
ФУНКЦІЯ Функція — це відображення множини її аргументів на множину її значень. Це спеціальним чином оформлений фрагмент програми, до якого можна звернутися всередині програми (підпрограма для ассемблера). Вони покращують читабельність та скорочують вихідний код. Функції бувають: -стандартні (передбачені мовою PHP); 2 -користувацькі (які виконують дії, які нам потрібні).
ОСОБЛИВОСТІ ВИКОРИСТАННЯ ФУНКЦІЙ 1. Можна використовувати параметри, встановлені по замовчуванню. Це дозволяє викликати одну й ту саму функцію з змінним числом параметрів. 2. Функція може повертати значення любого типу. 3. Область видимості змінних всередині функції деревовидна. 4. Повернутися з функції можна за допомогою функції return. 5. Можна змінювати значення змінних, які передані в якості аргумента.
НЕДОЛІКИ ФУНКЦІЙ В PHP 1. Неможливо об’явити локальну функцію (тобто неможливо створити функцію всередині іншої так, щоб вона була видима тільки цій функції -- її буде видно всій програмі). Приклад, Результат: “Firstsecond”
НЕДОЛІКИ ФУНКЦІЙ В PHP 2. Область видимості функцій. Глобальні та локальні змінні. Глобальні – ті, які видні та доступні всій програмі (функціям). Локальні визначені всередині підпрограми (функції) і видні та доступні тільки їй. Із тіла функції неможливо змінити глобальну змінну, навіть якщо локальну назвати так само – вона невидима за межами цієї функції. Приклад, Результат: і=5; і=10; Однак є спеціальна інструкція global (робота з глобальними змінними), яка це дозволяє робити.
СТВОРЕННЯ КОРИСТУВАЦЬКИХ ФУНКЦІЙ 1. Об’явлення функцій – може бути об’явлена в любій частині програми, до місця першого використання, в межах php-коду. Дійшовши до визначення функції, транслятор перевіряє коректність визначення і транслює це визначення у внутрішнє представлення, при цьому код не транслює (для чого транслювати, якщо вона може ніколи не бути використаною). Синтаксис: function Ім’я_функції (пар1, пар2, . . . пар. N) { Блок_виконання return "значення, що повертається функцією"; } Для передачі результату роботи функції в основну програму return
ІМЕНА ФУНКЦІЙ (ВИМОГИ) • І’мя бажано писати англ. мовою • В імені не може бути пробілів. • Імя повинно бути унікальним. • Немає $ перед іменем функції. • Імена функцій не чутливі до регістру. 7 • Функція – дія, ім’я – дієслово.
ПЕРЕДАЧА ФУНКЦІЇ ПАРАМЕТРІВ. 1. По значенню (доступний у функції тільки для читання, функція його використовує, але змінити його неможе) 8 Результат: виведемо рядок “Параметр=3” – два рази
2. ПО ПОСИЛАННЮ (ТУТ ПЕРЕДАЄТЬСЯ ЗМІННА З &, А НЕ ЗНАЧЕННЯ) Результат:
3. ПО-ЗАМОВЧУВАННЮ Параметри по-замовчуванню повинні стояти після звичайних параметрів (якщо такі існують)
СПИСКИ АРГУМЕНТІВ ПЕРЕМІННОЇ ДОВЖИНИ Вбудовані функції func_num_args(), func_get_args(). Функція func_num_args() повертає число аргументів, переданих в текучу функцію. Ця функція може використовуватися тільки всередині визначення користувацької функції. Якщо вона появиться поза функцією, то інтерпретатор видасть попередження. php function Data. Check() { $n = func_num_args(); echo "Число аргументів функції $n"; } Data. Check(); // виведе рядок // "Число аргументів функції 0" Data. Check(1, 2, 3); // виведе рядок // "Число аргументів функції 3" 11 ? >
СПИСКИ АРГУМЕНТІВ ПЕРЕМІННОЇ ДОВЖИНИ Функція func_get_arg (ціле номер_аргумента ) повертає аргумент із списка перемінних в функцію аргументів, порядковий номер якого заданий параметром номер_аргумента. Аргументи функції рахуються починаючи з нуля. Ця функція може використовуватися тільки всередині визначення функції. 12 Номер_аргумента не может перевищувати число аргументів, переданих в функцію. Так як буде згенеровано попередження, і функція func_get_arg() поверне False.
СТВОРИМО ФУНКЦІЮ ДЛЯ ПЕРЕВІРКИ ТИПУ ДАНИХ ЇЇ АРГУМЕНТІВ. РАХУЄМО, ЩО ПЕРЕВІРКА ПРОЙШЛА УСПІШНО, ЯКЩО ПЕРШИЙ АРГУМЕНТ ФУНКЦІЇ – ЦІЛЕ ЧИСЛО, ДРУГИЙ – РЯДОК. if (Data. Check(123, "text")) echo "Перевірка пройшла успішно "; else echo "Дані не задовільняють умові "; ? > Результат: Дані не задовільняють умові Перевірка пройшла успішно 13 function Data. Check() { $check =true; $n = func_num_args(); // число аргументів, які передані в функцію /* перевіряємо, чи являється перший переданий аргумент цілим числом */ if ($n>=1) if (!is_int(func_get_arg(0))) $check = false; /* перевіряємо, чи є другий аргумент, переданий у функцію, рядком */ if ($n>=2) if (!is_string(func_get_arg(1))) $check = false; return $check; } if (Data. Check(“text”, 324)) echo "Перевірка пройшла успішно "; else echo "Дані не задовільняють умові ";
14 Функція func_get_args() повертає масив, який складається із списку аргументів, переданих функції. Кожен елемент масиву відповідає аргументу, переданому функції. Якщо функція використовується поза визначеннямфункції, то генерується попередження.
Перепишемо попередній приклад, використовуючи цю функцію. Будемо перевіряти, чи є цілим числом кожен парний аргумент, який передається функції: function Data. Check(){ $check =true; $n = func_num_args(); // число аргументів, які передаються в функцію $args = func_get_args(); // масив аргументів функції for ($i=0; $i<$n; $i++){ $v = $args[$i]; if ($i % 2 == 0){ if (!is_int($v)) $check = false; // перевіряємо, чи є парний аргумент цілим } } return $check; } if (Data. Check(array("text", 324))) echo "Перевірка пройшла успішно "; ? > 15 else echo "Дані не задовільняють умовам ";
Використаємо в якості аргументу масив і перевіримо, чи є непарний параметр функції цілим числом? function Data. Check($params){ $check =true; $n = count($params); // число аргументів, переданих в функцію for ($i=0; $i<$n; $i++){ $v = $params[$i]; if ($i % 2 != 0){ // перевіряємо, чи є непарним аргумент цілим if (!is_int($v)) $check = false; } } return $check; } if (Data. Check(array("text", 324))) else echo "Дані не задовільняють умові "; ? > 16 echo "Перевірка пройшла успішно ";
ВИКОРИСТАННЯ ПЕРЕМІННИХ ВСЕРЕДИНІ ФУНКЦІЇ Щоб використовувати всередині функції перемінні, задані ззовні її, ці перемінні потрібно об’явити як глобальні. Для цього в тілі функції потрібно перечислити їх імена після ключового слова global: global $var 1, $var 2; $a=1; function Test_g(){ global $a; $a = $a*2; echo 'в результаті роботи функції $a=', $a; } echo ‘ззовні функції $a=', $a, ', '; Test_g(); 17 ? >
СТАТИЧНІ ФУНКЦІЇ Щоб використати переміні тільки всередині функції, при цьому зберігаючи їх значення і після виходу із функції, потрібно об’явити ці перемінні як статичні. Статичні перемінні видно тільки всередині функції і не втрачають свого значення, якщо виконання програми виходить за межі функції. Об’явлення таких перемінних відбувається за допомогою ключового слова static: static $var 1, $var 2; Статичній перемінній може бути присвоєно любе значення, але не посилання. function Test_s() { static $a = 1; // неможна присвоювати вираз або посилання $a = $a*2; echo $a; } Test_s(); // виведе 2 echo $a; // ничого не виведе, так як $a доступна тілько всередині функції Test_s(); // всередині функції $a=2, тому результатом роботи функції 18 // буде число 4
VISIBILITY php function inc($a) { $a++; } $a = 100; inc($a); echo $a; 19 ? >
VISIBILITY php function inc($a) { global $a; $a++; } $a = 100; inc(); echo $a; 20 ? >
LIFETIME (GLOBAL) php $global_var = 100; unset($global_var); echo $globalvar; 21 ? >
$msg" src="https://present5.com/presentation/3/70115654_171833599.pdf-img/70115654_171833599.pdf-22.jpg" alt="LIFETIME (STATIC) php function print. Msg($msg) { static $a = 1; echo "
$msg" /> LIFETIME (STATIC) php function print. Msg($msg) { static $a = 1; echo "
$msg = ". $a++; } print. Msg("Один"); print. Msg("Два"); print. Msg("Три"); 22 ? >
РЕКУРСІЯ php function factorial($n) { if ($n < 0) return 0; if ($n < 2) return 1; for($i=2, $f=1; $i<=$n; $i++) $f *= $i; return $f; } 23 echo factorial(3). "
"; echo factorial(5). "
"; echo factorial(8). "
"; ? >
РЕКУРСІЯ php function factorial($n) { if ($n < 0) return 0; if ($n < 2) return 1; } return $n * factorial($n-1); 24 echo factorial(3). "
"; echo factorial(5). "
"; echo factorial(8). "
"; ? >
"; } $my. Func" src="https://present5.com/presentation/3/70115654_171833599.pdf-img/70115654_171833599.pdf-25.jpg" alt="ДИНАМІЧНИЙ ВИКЛИК php function print. Msg($msg) { echo $msg. "
"; } $my. Func" /> ДИНАМІЧНИЙ ВИКЛИК php function print. Msg($msg) { echo $msg. "
"; } $my. Func = "print. Msg"; $my. Func("Динамічний виклик функції"); 25 ? >
ЗАКЛЮЧЕННЯ • Не ставте перед функцією глобальних задач. • Функція має бути невеликою (20 -30 рядків). 26 • Перш ніж створювати свою функцію, переконайтеся, що немає аналогічної вбудованої.