Функції зворотного виклику в php
1. Постановка завдання
Отже, давайте розглянемо наступний приклад. Є три текстові файли, кожен з яких містить певний набір чисел. Ось вміст одного з файлів:
Для читання цих файлів передбачений спеціальний клас, такого змісту:
Даний клас досить простий і містить всього один метод get_numbers (). Цей метод приймає в якості аргументу масив $ files, в якому містяться імена фалів для читання. Після перевірки наявності даних файлів, ми виконуємо їх читання, і вміст, записуємо в попередньо в змінну $ data, а потім в властивість $ numbers. Давайте подивимося в браузері, виведе даний код:

Клас свою задачу виконує, але що робити, якщо скажемо, через деякий час необхідно буде, певним чином обробляти дані отримані з файлів. Наприклад, помножити на число, або додати рядок і т.д. При цьому доведеться переписувати код даного методу, так як він не універсальний і виконує тільки одну поставлену задачу. Тому в даному уроці ми додамо універсальності даного класу, використовуючи функції зворотного виклику.
2. Модернізація класу
Насамперед визначимося, що таке функції зворотного виклику. Функції зворотного виклику (callback) - передбачає передачу певного виконуваного коду в якості одного з параметрів для іншого коду. Тобто зворотний виклик функцій дозволяє в певному методі виконувати код, який задається в її аргументах. Функції зворотного виклику, це - як правило звичайні функції, які безпосередньо ні коли не викликаються.
Прямий виклик функції: function (). Функції зворотного виклику зазвичай передаються як параметр для іншої функції. І при цьому ми передаємо покажчик (посилання) на функцію. Зараз давайте змінимо код методу get_numbers (), в такий спосіб:
Перше, що додано - це другий необов'язковий аргумент $ callback = FALSE. Це і є вказівник на посилання зворотного виклику. Який, за замовчуванням дорівнює FALSE. І друге, додана перевірка: якщо в змінній $ callback міститься покажчик на функцію зворотного виклику. Значить необхідно викликати цю функцію. Для цього потрібно, щоб переглянути - а чи можна викликати функцію, покажчик на яку збережений в змінній $ callback. Для цього використовується функція is_callable ($ callback), яка в якості аргументу приймає покажчик на функцію. Вона поверне TRUE, якщо функцію дійсно можна викликати на виконання.
Для виконання функцій зворотного виклику застосовують стандартну функцію: call_user_func ($ callback, $ file, $ data), яка першим параметром приймає покажчик на функцію, а наступними - аргументи, які повинні бути передані при виконанні функції.
Таким чином, ми закладаємо при створенні методу - якусь універсальність. У потрібний момент, якщо нам необхідно буде якимось чином вплинути на повертаються дані. Нам достатньо буде створити функцію зворотного виклику і передати її покажчик в якості параметра для методу get_numbers ().
3. Створення функцій зворотного виклику
Розрізняють три основних види функцій зворотного виклику:
1. Класична функція - як функція зворотного виклику. Давайте створимо таку функцію. Не забуваючи про параметри, які вона повинна приймати:
2. Статичний метод класу - як функція зворотного виклику. Давайте створимо клас і додамо в нього такий метод:
3. Звичайний метод класу - як функція зворотного виклику. Давайте додамо даний метод до раніше створеного класу MyClass:
Тепер давайте, викличемо метод get_numbers () і подивимося, як передати параметром функцію зворотного виклику, кожного з типів. Отже, як зазвичай викликати метод ми будемо в такий спосіб:
У змінній $ callback будемо зберігати покажчик на функцію зворотного виклику. Значить, для виклику кожного з типів, досить визначити дану змінну перед кодом виклику. Тепер для функції зворотного виклику першого типу:
І відповідно на екрані ми побачимо наступне:

Для другого типу:
Так як другий тип - це статичний клас, значить у змінній $ callback, необхідно зберегти масив. У першій клітинці якого, вказуємо клас, в якому описаний даний статичний метод. У другій клітинці вказуємо ім'я статичного методу. На екрані ми побачимо наступне:

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

Як Ви бачите, при виклику функцій зворотного виклику ми змінюємо дію методу get_numbers (). І в завершенні даного уроку, хотів би показати ще два способи, створення функцій зворотного виклику:
1. Створення анонімної функції і збереження покажчика на неї, в змінної:
При цьому на екрані ми побачимо наступне:

2. Створення функції за допомогою функції create_function () (перший параметр це рядок переданих аргументів, другий - рядок коду функції):
На екрані ми побачимо наступне:

Як Ви бачите використання даних функцій, додає універсальності і гнучкості створюваним скриптів. Тому в деяких випадках їх дуже корисно і потрібно використовувати.
На цьому даний урок завершено. Всього Вам доброго і вдалого кодування.
Найсвіжіші новини IT і веб-розробки на нашому Telegram-каналі