php Как передать в качестве колбэка не анонимную (обычную) функцию обратного вызова (колбэка) -- пример кода
Primary tabs
- Цель: Дать возможность использовать повторно код колбэка в разных классах
- Задача: передать неанонимную фунцкию (статический метод) как анонимную функцию обратного вызова
Ситуация
У меня есть функция с сигнатурой:
public function dontSeeFormIsEditable(string $formSelector, array $exeptNames = [], callable $safeNameCheckFunction = null) {/*....*/}
В качестве третьего параметра хочется передать не анонимную функцию -- а именно статический метод класса:
class TestUser extends BaseUser { public static function isInputSafe($inputName) { $result = false; return $result; } }
Возможное решение
Можно написать в том же классе метод, возвращающий анонимную функцию-обёртку над имеющейся статической функцией, тогда класс может выглядеть как-то так:
class TestUser extends BaseUser { public static function isInputSafe($inputName) { $result = false; return $result; } /** * Вернёт анонимную обёртку над self::isInputSafe() * * @return callable возвращает анонимню функцию */ public static function getInputSafeCheckCallback() { $realization = function($inputName) { return self::isInputSafe($inputName); }; return $realization; } }
Тогда передать колбэк, используя обёртку можно так (пример вызова принимающей его функции):
dontSeeFormIsEditable('div', [], TestUser::getInputSafeCheckCallback());
- Log in to post comments
- 2021 reads