Как выполнить обратный вызов, хранящийся в статической переменной класса в PHP? - PullRequest
1 голос
/ 21 июня 2019

У меня есть простой класс со статическим обратным вызовом. Но когда я пытаюсь выполнить обратный вызов, я получаю следующую ошибку:

E_NOTICE: тип 8 - неопределенная переменная: _fn - в строке 14 Исключение: Имя функции должно быть строкой

Вот мой PHP-код:

<?php

class test
{
    public static $_fn = null;

    public static function setFN(callable $fn)
    {
        self::$_fn = $fn;
    }

    public static function do($arg)
    {
        self::$_fn($arg);
    }
}

test::setFN(function ($arg) {
    echo $arg;
});

test::do('test');

?>

Может кто-нибудь, пожалуйста, пролить свет, что здесь не так?

1 Ответ

1 голос
/ 21 июня 2019

Вы можете использовать call_user_func для вызова хранимой функции:

class test
{
    public static $_fn = null;
    public static function setFN(callable $fn)
    {
        self::$_fn = $fn;
    }
    public static function do($arg)
    {
        call_user_func(self::$_fn, $arg);
    }
}

test::setFN(function ($arg) {
    echo $arg;
});

test::do('test');

Демонстрация: https://3v4l.org/5tHJI

Другой обходной путь - перевести обратный вызов в локальную переменную:

public static function do($arg)
{
    $fn = self::$_fn;
    $fn($arg);
}

Демо: https://3v4l.org/7cOaH

Или еще короче:

public static function do($arg)
{
    (self::$_fn)($arg);
}

Демо: https://3v4l.org/OhHfI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...