Функції зворотного виклику в php

1. Постановка завдання

Отже, давайте розглянемо наступний приклад. Є три текстові файли, кожен з яких містить певний набір чисел. Ось вміст одного з файлів:

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

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

Функції зворотного виклику в php

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

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 будемо зберігати покажчик на функцію зворотного виклику. Значить, для виклику кожного з типів, досить визначити дану змінну перед кодом виклику. Тепер для функції зворотного виклику першого типу:

І відповідно на екрані ми побачимо наступне:

Функції зворотного виклику в php

Для другого типу:

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

Функції зворотного виклику в php

Для третього типу:

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

Функції зворотного виклику в php

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

1. Створення анонімної функції і збереження покажчика на неї, в змінної:

При цьому на екрані ми побачимо наступне:

Функції зворотного виклику в php

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

На екрані ми побачимо наступне:

Функції зворотного виклику в php

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

На цьому даний урок завершено. Всього Вам доброго і вдалого кодування.

Найсвіжіші новини IT і веб-розробки на нашому Telegram-каналі