php Как передать в качестве колбэка не анонимную (обычную) функцию обратного вызова (колбэка) -- пример кода

  • Цель: Дать возможность использовать повторно код колбэка в разных классах
  • Задача: передать неанонимную фунцкию (статический метод) как анонимную функцию обратного вызова

Ситуация

У меня есть функция с сигнатурой:

    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());

Key Words for FKN + antitotal forum (CS VSU):