68918

Користувацькі функції

Лекция

Информатика, кибернетика и программирование

У будь-якій мові програмування існують підпрограми. У мові С вони називаються функціями, в асемблері — підпрограмами і викликаються інструкцією CALL, а в мові Pascal існує навіть два види підпрограм: процедури і функції.

Украинкский

2014-09-27

45 KB

0 чел.

Лекція № 11

Тема: Користувацькі функції

План

  1.  Користувацькі функції
  2.  Створення функцій

Що таке «призначені для користувача функції»

У будь-якій мові програмування існують підпрограми. У мові С вони називаються функціями, в асемблері — підпрограмами і викликаються інструкцією CALL, а в мові Pascal існує навіть два види підпрограм: процедури і функції.

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

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

Особливості призначених для користувача функцій в РНР

Як уже згадувалося, в мові РНР підпрограми називаються функціями. Ось особливості використання функцій в РНР:

Ви можете використовувати параметри, встановлені за умовчанням. Це, зокрема, дозволяє викликати одну і ту ж функцію із змінним числом параметрів.

Функція може повертати будь-який тип.

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

Наявність інструкції return, як в мові С.

Можна змінювати змінні,  передані як аргумент (як параметр-змінна в Паскалі).

Мова РНР надає програмістові величезну свободу при створенні власних функцій. При програмуванні на інших мовах мені дуже не вистачало параметри за умовчанням, які дозволяють написати функцію з різним числом параметрів. У мові C++ з'явився механізм перезавантаження функцій, але параметри за умовчанням — це гнучкіший засіб. Адже в C++ для кожної переобтяженої функції нам потрібно наново писати її тіло. А в мові РНР цього робити не потрібно. У цьому розділі ми обов'язково розглянемо параметри за умовчанням.

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

<?

function first() { echo "First"; function Second() (

echo "Second"; } )

First () ; second ()

?>

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

  Примітка. Зверніть увагу на імена функцій при оголошенні (first і Second) і при виклику (First і second). Це не друкарська помилка - РНР нечутливий до регістра імен функцій. Ви можете викликати функцію first(), FIRsT() або якось інакше.

Другий недолік пов'язаний з областю видимості функцій. Але спочатку небагато скажемо про глобальні і локальні змінні. Глобальні змінні — це змінні, які видно і доступно всій програмі зі всіма вхідними в неї підпрограмами(функціям). Локальні змінні, визначені усередині підпрограм, видно і доступно тільки усередині самої підпрограми(функції), в якій вони визначені.

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

Наступний приклад підтверджує даний факт:

$i   =   10;

function   change()    {

$i   =   5;

echo "i = $i<br>\n";

change () ;

echo "i = $i";

Сценарій спочатку надрукує 5, а потім — 10.

Проте, в РНР існує можливість позбавитися від цього недоліку. Для цього передбачено використання спеціальної інструкції global, яка дозволяє функції працювати з глобальними змінними. Докладніше про це ми говоритимемо в п. 8.6.

Створення призначених для користувача функцій

Функція може бути оголошена в будь-якій частині програми (в межах операторів <? і ?>), але до місця першого її використання. Іншими словами, не потрібно ніякого попереднього оголошення, як в інших мови програмування, зокрема, в С. Дойдя до визначення функції, транслятор перевірить коректність визначення і відтранслюватиме визначення функції у внутрішнє уявлення, але транслювати код він не стане. Даний підхід є найправильнішим — навіщо транслювати код, який, можливо, ніколи не використовуватиметься?

Для оголошення функцій використовується такий синтаксис:

function   Ім'я    (аргумент1[=значение1],...,аргумент1[=значение1])

{

тіло   функції

}

Оголошення функції починається службовим словом function, потім слідує ім'я функції, після імені — список аргументів в дужках. Тіло функції полягає у фігурні дужки і може містити довільне число операторів.

Вимоги до імен функцій:

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

Ім'я функції не повинне містити пропусків і пробільних символів.

Ім'я повинне бути унікальним з точністю до регістра, тобто
функції F1() і fl() — це одна і та ж функція.

Функціям можна давати такі ж імена, як і змінним, тільки без знаку долара на початку імені.

Оскільки тип повертаного значення може бути будь-яким, його (тип) не указують зовсім. Для передачі результату роботи функції в основну програму використовується інструкція return. Якщо функція нічого не повертає, інструкцію return не указують. Інструкція return може повертати все, що завгодно, у тому числі і масиви.

Перша функція

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

<?

function GetRand() {

$LocalArr = array();

mt_srand(time());

for($i=;$i<10;$i++) $LocalArr[] = mt_rand(0,100);

return $LocalArr;

}

$A = GetRand();

foreach($a as)

?>


 

А также другие работы, которые могут Вас заинтересовать

67360. ПРАВОМЕРНОЕ ПОВЕДЕНИЕ И ПРАВОНАРУШЕНИЯ 123.5 KB
  Нарушение предписаний правовых норм в любом обществе носит массовый характер и создает ему весьма ощутимый моральный и материальный вред. Все без исключения правонарушения представляют собой деяния людей а не воздействие сил природы или предметов не действия животных.
67361. Перехоплення винятків класового типу 71 KB
  Виняток може мати будь-який тип, у тому числі і класового типу, створенного програмістом. У реальних програмах більшість винятків мають саме класовий тип, а не вбудований тип. Ймовірно, тип класу найбільше підходить для опису помилки, яка потенційно...
67362. ЮРИДИЧЕСКАЯ ОТВЕТСТВЕННОСТЬ. СОЦИАЛЬНАЯ ОТВЕТСТВЕННОСТЬ И ЕЕ ВИДЫ 143.5 KB
  Ответственность личности имеет социальную природу предопределенную как общественным характером отношений так и особенностями личности ее местом в системе этих отношений. Социальная ответственность возникает тогда когда поведение индивида имеет общественное значение...
67363. Перехоплення всіх винятків 78.5 KB
  Часто доцільно використовувати настанову catch(...) як останній «рубіж» catch-послідовності. У цьому випадку вона забезпечує перехоплення винятків усіх інших типів (тобто не передбачених попередніми catch-виразами). Наприклад, розглянемо ще одну версію попереднього коду програми...
67364. ПРАВОСОЗНАНИЕ И ПРАВОВОЕ ВОСПИТАНИЕ 137 KB
  Нормы права нормативные акты правоприменительные решения и другие юридические феномены могут рассматриваться как своеобразные теоретические и практические проекции культуры для обозначения которых в этом качестве науке необходимо специальное понятие.
67365. Повторне генерування винятку 79.5 KB
  Для того, щоби повторно згенерувати винятки в його обробнику, необхідно використовувати throw-настанову без вказання типу винятку. У цьому випадку поточний виняток передається в зовнішню try/catch-послідовність. Найчастіше причиною для такого виконання настанови throw слугує прагнення мати доступ до одного винятку декільком обробникам.
67366. ПРАВОВАЯ КУЛЬТУРА. ПОНЯТИЕ И ОБЩАЯ ХАРАКТЕРИСТИКА 116.5 KB
  Для раскрытия сущности обозначенной проблемы необходимо рассмотреть исходные предпосылки и принципы формирования теории правовой культуры проанализировать последнюю как объект изучения и типы знаний об этом объекте определить круг исследуемых вопросов...
67368. Потоки. Класи потоків С++ 177.5 KB
  На сьогодні існують дві версії бібліотеки об'єктно-орієнтованого введення-виведення даних, причому обидві широко використовуються програмістами: стара, що базується на оригінальних специфікаціях мови C, і нова – визначається стандартом мови програмування C++.