Почему PHP код с замыканием не работает? Это связано с особенностью PHP или может StdClass просто не позволяет делать такие трюки? Или просто 5.6 не умеет так? (пс. пробую писать в js нотации)$obj = new StdClass();
$obj->fn = new StdClass();
$obj->fn->move = function ($a, $b) {
print_r($this);
return $a * $b;
};
print_r($obj->fn->move(1,2));Fatal error: Call to undefined method stdClass::move() in [file] on line [line]

21 Авг 2019 в 07:02
199 +1
2
Ответы
1

Проблема здесь не связана с особенностями PHP, а скорее с тем, что в стандартном классе StdClass нельзя определять методы как замыкания. StdClass является простым классом в PHP, который используется для создания объектов без явного определения свойств.

Если вы хотите использовать замыкания в PHP, вы можете создать анонимные функции и присваивать их переменным. Например:

$obj = new StdClass();
$obj->fn = new StdClass();
$obj->fn->move = function ($a, $b) {
print_r($this);
return $a * $b;
};
$fn = $obj->fn->move;
print_r($fn(1, 2));

Этот код будет работать, потому что здесь мы используем анонимную функцию, которая сохраняет контекст выполнения, в отличие от метода класса, определенного в StdClass.

Поэтому, чтобы использовать замыкания в PHP, вам нужно использовать анонимные функции вместо стандартных методов классов.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир