Почему 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]
Проблема здесь не связана с особенностями 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, вам нужно использовать анонимные функции вместо стандартных методов классов.
Проблема здесь не связана с особенностями 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, вам нужно использовать анонимные функции вместо стандартных методов классов.