PHP: Визначення та виклик функції. Функції з параметрами, динамічні виклики, створення функції у PHP Що таке функція php

Нотатка:активовано адаптивну версію сайту, яка автоматично підлаштовується під невеликий розмір Вашого браузера та приховує деякі деталі сайту для зручності читання. Приємного перегляду!

Всім добрий день. Сьогоднішньою статтею ми продовжуємо занурюватися в надра PHP, але не тільки. Наприкінці цієї статті ви знайдете кросворд, розгадавши який ви можете отримати від 500 до 1500 карбованців. Всі подробиці, а ми продовжуємо вчитися.

Що таке функція?

Функція– це ділянка коду, яку можна багаторазово виконувати у різних місцях PHP скрипта (нашої сторінки).

Синтаксис:

Function siteOn()( // тіло функції echo "Привіт всім читачам блогу Site on!"; )

Де siteOn- Це довільне ім'я функції, воно регістро-незалежне. Функція на прикладі вище виводить заданий текст. Коли PHP інтерпретатор обробляє код, він бачить лише оголошення функції без її тіла, і природно, не виконує його. Тіло функції зберігатиметься в пам'яті до завершення роботи PHP скрипта, тобто до кінця завантаження сторінки.

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

"; ) siteOn(); // виклик функції siteOn(); // виклик функції siteOn(); // виклик функції ?>

У прикладі вище ми викликали функцію аж 3 рази, і ось результат:

Навіщо потрібні функції?

Здавалося б, ну і функція? Ми могли б цей рядок просто написати тричі і без функції. Могли, але якщо ми раптом захочемо щось змінити в цьому фрагменті, то міняти нам доведеться лише в одному місці, а не в трьох. Але це ще не все! Зараз ми розглянули простий варіант, коли поряд і в одному файлі. У житті у файлі може бути тисячі рядків, і розкидані вони можуть бути хаотично по всьому файлу.

Одна справа зайти і поміняти все в одній функції, інша міняти в 10 місцях та ще й шукати по всьому файлу. Але це не все! Сайти не складаються з одного файлу, якийсь фрагмент коду нам міг би стати в нагоді в десятках різних файлів, і нам довелося б шукати всі повторення цього коду купу часу. Завдяки функціям ми знаємо, що, наприклад, всі функції ми зберігаємо в файлі, зайду туди, і поміняю один раз.

Тобто можете взяти собі таке правило: якщо якась ділянка коду повторюватиметься, то обов'язково робимо з неї функцію!

Перевірка на існування

У PHP не можна 2 рази оголосити одну і ту ж функцію. Наприклад, якщо написати:

// будь-який код або без нього) function siteOn()( // будь-який код або без нього } ?>

То отримаємо таку помилку. До речі, запам'ятовуйте всі типові помилки:

Cannot redeclare siteOn() (попередньо declarated в Z:\home\custom\www\index.php:3) in Z:\home\custom\www\index.php on line 9

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

Щоб дізнатися, чи існує вже така функція, ви можете використовувати вбудовану функцію function_exists(). Приклад:

// будь-який код або без нього) if(function_exists("siteOn"))( echo "Така функція вже є!"; ) ?>

Результат:

Особисто я ніколи не використовую цієї функції, але знати ви про неї повинні.

Аргументи функцій

Аргумент функції можна назвати її параметром. Виглядає це так:

У прикладі вище аргумент функції це змінна $author. Як його можна використати? При викликі функцій ми можемо передавати всередину її значення аргументу. Це надає нашим функціям небувалої гнучкості та динаміки:

"; ) siteOn("Сергій"); // перший спосіб $name = "Андрій"; // другий спосіб siteOn($name); siteOn(); // нічого не передаємо ?>

Результат:

Як бачите, коли ми не передали аргументу, ми отримали помилку типу Warning, Після якої виконання нашого PHP скрипту все одно продовжилося далі. Знову ж таки, помилка містить дуже докладну інформацію про те, де все це сталося. Warning – це серйозна помилка, і ігнорувати її не можна.

Функція може мати скільки завгодно аргументів, наприклад:

"; ) siteOn("Сергій", "Site on!"); // перший спосіб $name = "Андрій"; // другий спосіб siteOn($name, "Солодка"); siteOn("Федор Іванов"); // передали лише 1 аргумент ?>

Результат:

Нестандартний виклик функцій

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

";) $text = "siteOn"; // Заносимо в змінну ім'я функції$text("Сергій", "Site on!"); // Викликаємо функцію через змінну ?>

Результат буде яким і зазвичай:

Практичний приклад використання функцій

Пам'ятаєте таблицю множення з попередньої? Там у нас є 2 параметри: кількість рядківі кількість стовпців, які ми задаємо у змінних. Саме час зробити з того коду цілу функцію, яка прийматиме два вищеперелічені значення!

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

// закоментували ці 2 рядки, тому що кількість тепер передається при виклику функції // $ rows = 20; // кількість рядків, tr // $cols = 20; // кількість стовпців, td$table = "

"; for ($tr=1; $tr<=$rows; $tr++){ $table .= ""; for ($td=1; $td<=$cols; $td++){ if ($tr===1 or $td===1){ $table .= ""; )else( $table .= " "; )) $table. = ""; ) $table .= "
". $tr*$td ."". $tr*$td ."
"; echo $table; ) getTable(3,3); // Виводимо таблицю множення 3 на 3 getTable(5,5); // Виводимо таблицю множення 5 на 5 getTable(10,10); // Виводимо таблицю множення 10 на 10 ?>

Результат:

Аргументи за замовчуванням

Під час створення функції ми можемо задати довільним аргументам значення за промовчанням. Аргументи, які мають значення за замовчуванням, можна не вказувати при виклику функції і це не буде помилкою. Тому що замість пропущеного аргументу функція автоматично підставить значення за промовчанням. Приклад:

"; ) siteOn("Сергій"); ?>

У цьому прикладі ми є аргументом $blogнадали значення за замовчуванням Site on!Після чого викликали функцію лише з одним аргументом, а другий використовував своє значення за умовчанням.

Результат:

аргументи за промовчанням обов'язково записуються останніми.

Іншими словами: обов'язкові аргументи (без значення за замовчуванням) зліва направо повинні йти першими, далі за ними йдуть аргументи, які мають значення за умовчанням.

Функція просто блок коду, який має назву і вхідні параметри для обробки, який може бути виконаний, коли нам це потрібно. Може здатися, що користі від них мало, але, повірте мені, коли ви зрозумієте і навчитеся використовувати функції, ви зможете заощадити купу часу і написати код, який буде набагато зручнішим для читання!

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

Створюємо свою першу функцію php

Коли ви створюєте функцію, потрібно спочатку дати їй ім'я, наприклад, myCompanyName. Найкраще називати функції зрозумілими назвами, які матимуть сенс, щоб не заплутатися. Це саме стосується і .

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

Ось як виглядає оголошення функції myCompanyName:

Примітка: Назва функції може починатися зі знака «_», але не з цифри!
Це лише каркас нашої функції, а всередині ми можемо помістити будь-який код, який захочемо. Виклик функції буде виконуватися. Чи бачите у фігурних дужках у наведеному вище прикладі «()»? Ці дужки визначають, де має бути наш код функції. Відкриваюча фігурна дужка "(" говорить PHP, що код функції починається, а фігурна, що закриває ")" говорить PHP, що наша функція закінчена!

Давайте додамо до неї щось простеньке, наприклад.

Ось і все досить просто, правда? Тепер навчимося викликати нашу функцію.

Виклик готової функції php

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

!
"; myCompanyName(); echo "Радий вас бачити!
";

Хоча це був простий приклад, важливо розуміти, що будь-яка неуважність може спричинити помилку. Коли ви створюєте функцію, дотримуйтесь цих простих рекомендацій.

  • Завжди починайте ваші функції із ключовим словом function.
  • Пам'ятайте, що ваш код функції повинні бути між "(" і ")".
  • Коли ви викликаєте функцію, переконайтеся, що пишете її ім'я правильно.

Опції з параметрами

Ще одна корисна можливість полягає в тому, що функції можна викликати з параметрами, тобто передавати всередину її коду додаткову інформацію. Наша перша функція myCompanyName не дуже корисна, тому що все що вона вміє, це друкувати один і той же рядок.

Однак, якби ми використовували параметри, ми могли б додати деякі додаткові фішки в нашу функцію! Параметр з'являється дужках () і виглядає як звичайна змінна PHP. Давайте створимо нову функцію, яка створює привітання користувача засноване на імені людини, яке ми передамо як параметр.

"; } ?>

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

Повернення значення функцією php

Крім того, що ви маєте можливість передати функції інформацію, вона також може і сама повернути значення. Але пам'ятайте, функція може повертати тільки одне значення, хоча це може бути будь-що: ціле число, речове, булеве значення, як ви забажаєте!

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

$myNumber = mySum(3, 4); // Зберігаємо результат виклику функції mySum в змінну $myNumber echo "Після виклику функції, myNumber = " . $myNumber ."
"; ?>

Щоб привласнити функції значення — до неї додається оператор return, чи бачите його? Результат складання двох чисел зберігається в змінній $ total, а за допомогою return $ total це значення передається самій функції. Потім ми просто привласнюємо його змінною $myNumber після виклику функції mySum з двома параметрами 3 і 4 (це числа, які слід скласти).

Практикуйтесь, розбирайтеся і у вас все вийде!

Функції користувача створюються за допомогою ключового слова function , за яким слідує ім'я функції, перелік її аргументів (кількість яких може бути нульовим) і тіло самої функції. Призначення функцій дуже широке. Якщо вам доводиться неодноразово виконувати якийсь той самий код, вам слід помістити його у свою функцію, а потім просто викликати її там, де вам потрібно. Ім'я функції має починатися із символу латинського алфавіту, може містити цифри та символ нижнього покреслення. За прийнятою угодою імена функцій в PHP починаються з малих літер, а якщо в імені використовується не одне слово, то кожне нове починається з великої літери або відразу, або після символу нижнього підкреслення.

/** * Оголошуємо просту функцію користувача */ function userFunction() ( )

Якщо в тілі функції є більше однієї інструкції, всі інструкції повинні бути поміщені всередину фігурних дужок (). Якщо функція має лише одну інструкцію, фігурні дужки не обов'язкові. Але я рекомендую вам їх завжди використовувати.

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

/** * Функція виведення IP-адреси користувача. * IP-адреса береться з суперглобального масиву PHP $_SERVER * який містить важливі дані про з'єднання та сервер */ function userIP() ( print "

" . $_SERVER["REMOTE_ADDR"] . "

"; }

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

UserIP(); // Виведе на екран IP-адресу користувача виду 127.0.0.1

Область видимості змінних

Працюючи з функціями слід вивчити поняття області видимості змінних. Полягає воно в тому, в яких місцях сценарію, які з оголошених змінних можуть бути використані. Змінні, оголошені всередині функції, є локальними змінними. Усередині тіла функції до них можна звертатися, а за межами функції до них вже звернутися не вийде. І навпаки, змінні, оголошені поза тілом функції, не доступні самій функції. Але є дані, які доступні в будь-якому місці сценарію.

Суперглобальні масиви

$_SERVER, $_SESSION, $_COOKIE та інші – це суперглобальні масиви. Їхні дані доступні в будь-якому місці сценарію. Ось лише кілька з них:

  • $_SERVER["REMOTE_ADDR"] - IP-адреса користувача;
  • $_SERVER["SERVER_NAME"] - ім'я сервера;
  • $_SERVER["DOCUMENT_ROOT"] - кореневий каталог сайту;
  • $_SERVER["REQUEST_URI"] — запитана адреса документа.

Аргументи функції

Якщо функція повинна мати доступ до даних змінної або константи, оголошених поза її тілом, ці дані можна передавати у вигляді аргументів. Кожна функція може приймати будь-яку кількість аргументів (параметрів), у тому числі нульову. У наведеному прикладі ми не передавали функції жодних аргументів. Розглянемо інший приклад.

/** * Оголошуємо функцію користувача для підсумовування двох довільних значень */ function amount($value_1, $value_2) ( // Функція повинна прийняти 2 обов'язкові аргументи print $value_1 + $value_2; // І вивести на екран суму цих аргументів ) $ green_apples = 10; // Ми маємо 10 зелених яблук $red_apples = 4; // І ще є 4 червоні яблука // Загальну кількість яблук ми можемо дізнатися за допомогою виклику функції amount() // Функція amount() повинна прийняти два аргументи, якими будуть кількості яблук amount($green_apples, $red_apples); // Виведе на екран 14

Необов'язкові параметри (параметри за замовчуванням)

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

/** * Оголошуємо функцію зі значеннями за умовчанням */ function amount($value_1, $value_2, $value_3 = 0) ( print $value_1 + $value_2 + $value_3; )

/** * Підраховуємо загальну кількість яблук * Цього разу функція amount() приймає три аргументи, * але третій є необов'язковим, оскільки його значення * було визначено при оголошенні функції, якщо ми третій * аргумент не вкажемо, він залишиться рівним нулю * /$ geen_apples = 11; $ Red_apples = 7; amount($green_apples, $red_apples); // Виведе на екран 18 // Знаходимо в коморі, раптово, ще 10 жовтих яблук $yellow_apples = 10; // І їх також треба врахувати amount($green_apples, $red_apples, $yellow_apples); // Виведе на екран 28

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

Function userF($v1, $v2 = 100, $v3) ( // До хорошого не приведе print $v1 + $v2 + $v3; )

Повернення значення

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

/** * Оголошуємо функцію користувача для підсумовування яблук * одне з значень є заданим за замовчуванням. * Функція просто підсумовує значення аргументів, і повертає їх сценарію, не виводячи на екран. */ function amount($value_1, $value_2, $value_3 = 0) ( $result = $value_1 + $value_2 + $value_3; // Просто складаємо значення аргументів функції return $result; // Повертаємо результат сценарію. Змінна $result є локальної // і його значення нічого очікувати доступно поза тілом функції ) $green_apples = 9; // у нас є 9 зелених яблук $red_apples = 14; // І ще 14 червоних яблук // Загалом у нас... $total_green_red = amount($green_apples, $red_apples); // Оператор return функції amount() поверне значення 23, // яке присвоюється змінною $total_green_red // Нам принесли ще 7 жовтих яблук $yellow_apples = 7; // І тепер ми... $total_green_red_yellow = amount($green_apples, $red_apples, $yellow_apples); // Поверне значення 30 і запише їх у змінну // $total_green_red_yellow $all = amount($total_green_red, $total_green_red_yellow); // Поверне значення 53 // Виведе на екран Зелених та червоних всього - 23 print "

Зелених і червоних всього - ". $total_green_red."

// Виведе на екран Зелених, червоних і жовтих всього - 30 print

Зелених, червоних і жовтих всього - " . $total_green_red_yellow ."

// Виведе на екран Сума значень - 53 print

Сума значень - ". $all."

";

Нотатка:активовано адаптивну версію сайту, яка автоматично підлаштовується під невеликий розмір Вашого браузера та приховує деякі деталі сайту для зручності читання. Приємного перегляду!

Привіт шановні читачі блогу Site on! Ми дізналися що є функція в PHP, навчилися створювати власні функції, передавати в них аргументи і викликати їх для виконання. Продовжуючи тему функцій у PHP, необхідно підкреслити наступні речі:

  • Всередині функції можна використовувати будь-який PHP код (цикли, умови, будь-які операції), включаючи інші функції (як інтегровані, так і власні);
  • Ім'я функції має починатися з латинської літери, або символу підкреслення, далі може йти будь-яка кількість латинських букв, цифр або символів підкреслення;
  • Всі функції мають глобальну область видимості, це означає, що будь-яка функція може бути викликана будь-де, навіть якщо ця функція визначена всередині іншої;
  • PHP не підтримує перевантаження функцій, також немає можливості перевизначити (змінити, доповнити) або видалити створену функцію;
  • Функції мають бути визначено до використання. Тобто якщо ви спочатку викличте функцію, а тільки потім – нижче за кодом її опишіть, це не вплине на працездатність і не викличе помилок.

Функції, що залежать від умов

Ми можемо створювати (визначати, описувати) функцію залежно від умови. Наприклад:

//викликали функцію sayHi, її можна викликати в будь-якому місці /*тут не можна викликати функцію sayGoodbye, тому що ми ще не перевірили умову і не зайшли всередину конструкції if*/ if($apply)( function sayGoodbye()( echo "Усім поки!"
"; } } /*ось тепер можемо викликати sayGoodbye*/
"; }

Результат:

І погляньте на цей приклад:

/*а ось що буде, якщо викликати sayGoodbye тут*/ sayGoodbye(); if($apply)( function sayGoodbye()( echo "Усім поки!"
"; ) ) function sayHi()( echo "Всім привіт!
"; }

Результат:

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

Вкладені функції

Вкладена функція – це функція, оголошена всередині іншої функції. Приклад:

/*Тут не можна викликати sayGoodbye, оскільки вона з'явиться тільки після виклику функції sayHi*/ sayHi(); /*викликали функцію sayHi, її можна викликати в будь-якому місці*/ /*Тепер можемо викликати sayGoodbye*/ sayGoodbye(); function sayHi()( echo "Всім привіт!"
"; function sayGoodbye()( echo "Усім поки що!
"; } }

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

Далі код починає виконуватися, ми викликаємо sayHi, інтерпретатор PHP доводиться зайти в тіло функції sayHi, щоб виконати її і там він випадково знаходить опис ще однієї функції - sayGoodbye, після чого і sayGoodbye можна викликати в будь-якому місці, скільки завгодно разів.

Але варто звернути увагу на дуже тонкий момент у ситуації вище: функція sayHi стає одноразовою, тому що якщо ми ще раз її викличемо, то PHP знову натрапить на визначення функції sayGoodbye, а в PHP так робити не можна – не можна перевизначати функції. Про це та про те, як з цим боротися я писав у попередній статті.

У PHP описані вище прийоми застосовуються дуже рідко, частіше їх можна побачити, наприклад, JavaScript.

Область видимості змінних

У PHP рівно дві області видимості: глобальнаі локальна. У кожній мові програмування області видимості влаштовані по-різному. Наприклад, у C++ навіть у циклах своя (локальна) область видимості. У PHP, до речі, це глобальна область видимості. Але сьогодні ми говоримо про функції.

У функцій PHP своя, внутрішня область видимості (локальна), тобто всі змінні всередині функції видно тільки всередині цієї функції.

Отже, ще раз: усе, що поза функціями – це світова область видимості, усе, що всередині функцій – локальна область видимості. Приклад:

Шановні знавці, увага, питання! Що виведе остання інструкція echo $name; ?

Як ви самі бачили, у нас було 2 змінні $name, одна всередині функції (локальна область видимості), інша просто в коді (глобальна область видимості), останнє присвоєння змінної $nameбуло $name = "Рудь Сергій";Але оскільки це було всередині функції, то воно й залишилося. У глобальній області видимості останнім присвоєнням було $name = "Андрій";що ми, власне, і бачимо в результаті.

Тобто дві однакові змінні, але в різних сферах видимості ніяк не перетинаються і не впливають один на одного.

Давайте я проілюструю область видимості на малюнку:

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

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

Але якщо нам все-таки потрібно з функції звернутися до тієї самої змінної $name з глобальної області видимості, та не просто звернутися, а змінити її? Для цього є 3 основні варіанти. Перше використання ключового слова global:

"; global $name; /*починаючи з цього моменту ми маємо на увазі глобальну змінну $name*/$name = "Рудь Сергій"; ) $ name = "Андрій"; sayHi($name); echo $name; //?

Результат:

Але цей спосіб має мінус, відколи ми звернулися до глобальної змінної $nameми втратили (переписали) локальну змінну $name.

Другий спосібполягає в тому, щоб використовувати суперглобальний масив PHP. Цей масив PHP сам, автоматично поміщає кожну змінну, яку ми створили в глобальній області видимості. Приклад:

$name = "Андрій"; // Теж саме що і$GLOBALS["name"] = "Андрій";

Отже:

$GLOBALS["name"] = "Рудь Сергій"; ) $name = "Андрій"; sayHi($name); echo $name; // ?

Результат той самий, що і під час використання ключового слова global:

Тільки цього разу ми не переписали локальну змінну, тобто змінну $nameвсередині функції залишилася колишньою і дорівнює "Андрій", а не "Рудь Сергій".

Передача аргументів за посиланням

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

Так ось, ПРАВИЛЬНА передача аргументу за посиланням у PHP 5.3 і вище здійснюється так:

Function sayHi(& $name)(

Ми в самому описі функції додали амперсанд (&) – цей значок означає, що ми приймаємо не значення змінної, а посилання (адресу) на це значення в пам'яті. Посилання в PHP дозволяють створити дві змінні, що вказують на те саме значення. Це означає, що при зміні однієї з цих змінних змінюються обидві, тому що в пам'яті вони звертаються до одного і того ж значення.

І в результаті маємо:

//Приймаємо не значення, а посилання значення echo "Привіт, ".$name."!
$name = "Рудь Сергій"; ) $name = "Андрій"; sayHi($name); echo $name; // ?

Результат:

Статичні змінні

Уявіть собі таку ситуацію: нам потрібно порахувати скільки разів ми привіталися. Ось що ми намагаємося зробити:

$c++; // збільшуємо лічильник на 1


Результат:

Змінна $cне запам'ятовує свого значення, вона щоразу створюється наново. Нам потрібно зробити так, щоб наша локальна змінна $cзапам'ятовувала своє значення після виконання функції, для цього використовують ключове слово static:

// лічильник, зробили статичним echo "Привіт, ".$name."!
$c++; // збільшуємо лічильник на 1 echo "Всього привіталися". $c. раз.


"; ) sayHi("Рудь Сергій"); sayHi("Андрій"); sayHi("Дмитро");

Результат:

Повернення значень

У функціях є така зручна річ як повернення значень. Це коли функція замість того, щоб вивести щось на екран, поміщає все змінну і віддає цю змінну нам. А ми вже далі вирішуємо, що з нею робити. Наприклад візьмемо цю функцію, вона зводить число квадрат:

Результат:

Зробимо так, щоб замість виведення на екран вона повертала результат виконання. Для цього використовується ключове слово return:

Результат:

Тепер ми можемо використовувати це різними способами:

//виводить результат echo "
$num = getSquare(5); echo $num;

Результат:

Звертаю вашу увагу на те, що ключове слово returnне просто повертає значення, а повністю перериває роботу функції, тобто весь код, який знаходиться нижче за ключове слово returnніколи не справдитися. Іншими словами, return для функцій також працює як breakдля циклів:

echo "До мене PHP ніколи не дійде:(";) echo getSquare (5); //виводить результат echo "
$num = getSquare(5); // надали результат у змінну echo $num; // Вивели змінну на екран

Результат:

Тобто return– це ще й вихід із функції. Його можна використовувати і без значення, що повертається, тільки заради виходу.

Рекурсивна функція

Рекурсивна функція – це функція, що викликає себе. Рекурсія використовується не часто і вважається ресурсомісткою (повільною) операцією. Але буває, що використання рекурсії найочевидніший і найпростіший варіант. Приклад:

"; if($number< 20){ // щоб рекурсія стала нескінченною countPlease(++$number); // Функція countPlease викликала сама себе) ) countPlease(1);

Результат:

Якщо ви знаєте, як обійтися без рекурсії, краще так і зробити.

Сувора типізація в PHP (уточнення типу)

У PHP зроблено дрібні кроки до суворої типізації, завдяки цьому ми можемо заздалегідь вказати, який тип має приймати функція (це називається type-hint):

Результат:

Catchable fatal error: Argument 1 passed to countPlease() мусить бути array, integer given, називається /home/index.php on line 7 і defined in /home/index.php on line 3

Помилка нам каже, що функція очікує прийняти масив, а натомість ми їй передаємо число. На жаль, поки що ми можемо уточнювати тип тільки (array), а з PHP 5.4 ще додався такий варіант як callable:

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

Викликали функцію getEcho

Використання аргументів змінної довжини

І наостанок ще один нюанс, що дуже рідко використовується. Уявіть ситуацію, ми передаємо в функцію аргументи, хоча функції ми їх не описали, наприклад:

Результат:

Як бачите, помилок немає, але наші передані аргументи ніде не використовуються. Але це не означає, що вони зникли – вони все одно передалися у функцію і ми можемо їх використовувати, для цього існують вбудовані функції PHP:

func_num_args()- Повертає кількість аргументів, переданих функції
func_get_arg (порядковий номер)- Повертає елемент зі списку аргументів
func_get_args()- Повертає масив, що містить аргументи функції

"; echo func_get_arg(0) ; ) $age = 22; getEcho("Рудь Сергій", $age);

Результат:

Висновок

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

Якщо у когось є бажання набити руку, але немає ідей як це зробити – найкращим способом буде написання вже готових (вбудованих) функцій PHP, наприклад, можна написати власну функцію count() чи будь-яку іншу.

Дякую всім за увагу і до нових зустрічей! Якщо щось не зрозуміло, сміливо ставте ваші запитання у коментарях!

Схожі статті