gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Почему 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]
  • Вопрос задан
  • 391 просмотр
Решения вопроса 2
riky
@riky
Laravel
StdClass нельзя добавлять методы.
когда вижу подобный код, меня прям трясет.
это вам не js, здесь вы можете создавать нормальные человеческие именованные классы.

UPD: только лишь в спортивных целях покажу как может работать
$f = $obj->fn->move;
  print_r($f(1,2));

то есть функция все таки сохраняется. но новый метод у класса не добавляется.
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
$obj = new StdClass();
  $obj->fn = new StdClass();
  $obj->fn->move = function ($a, $b) {
    print_r($this);
    return $a * $b;
  };
  
  var_dump($obj->fn->move);
  
  $move = $obj->fn->move;
  
  $move(1,2);


move не метод класса, а переменная, поэтому фатал.

stackoverflow.com/questions/9355377/declaring-an-a...
stackoverflow.com/questions/4535330/calling-closur...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект