Ответ 1
Проверьте callable
руководство, чтобы просмотреть все способы передачи функции в качестве обратного вызова. Я скопировал это руководство здесь и добавил несколько примеров каждого подхода, основанного на вашем сценарии.
Callable
- Функция PHP передается по имени в виде строки. Любая встроенная или определяемая пользователем функция может использоваться, за исключением языковых конструкций, таких как: array(), echo, empty(), eval(), exit(), isset(), list(), print или unset().
// Not applicable in your scenario
$this->processSomething('some_global_php_function');
- Метод объекта передается как массив, содержащий объект с индексом 0 и имя метода в индексе 1.
// Only from inside the same class
$this->processSomething([$this, 'myCallback']);
$this->processSomething([$this, 'myStaticCallback']);
// From either inside or outside the same class
$myObject->processSomething([new MyClass(), 'myCallback']);
$myObject->processSomething([new MyClass(), 'myStaticCallback']);
- Статические методы класса также могут передаваться без создания экземпляра объекта этого класса путем передачи имени класса вместо объекта с индексом 0.
// Only from inside the same class
$this->processSomething([__CLASS__, 'myStaticCallback']);
// From either inside or outside the same class
$myObject->processSomething(['\Namespace\MyClass', 'myStaticCallback']);
$myObject->processSomething(['\Namespace\MyClass::myStaticCallback']); // PHP 5.2.3+
$myObject->processSomething([MyClass::class, 'myStaticCallback']); // PHP 5.5.0+
- Помимо общей пользовательской функции, анонимные функции также могут быть переданы параметру обратного вызова.
// Not applicable in your scenario unless you modify the structure
$this->processSomething(function() {
// process something directly here...
});