kemply
@kemply
школьник

Как создать функцию-объект в PHP?

Такой код работает:
$obj = array(
  'func' => function(){ echo123; }
);

И при вызове он удачно покажет 123. Но, когда я хочу преобразовать это в функцию:
$obj = (object) $obj;
То функция не работает, и при вызове
$obj->func();
Выдает ошибку.
Даже пробовал так:
function tempFunc(){
  return function(){
     echo 123;
  };
}
$obj = (object) '';
$obj ->func = tempFunc();

Но если сделать тоже самое с массивом, это сработает:
$obj = array(
  'func' => tempFunc();
);


Как можно преобразовать массив с функцией в объект так, чтобы функция в объекте работала?
Использование классов не предлагать
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Использование классов не предлагать


В вашем случае функция сама по себе является объектом типа Closure.

$obj = $obj['func']; // просто забираем функцию из массива...


p.s. отсыпьте, или поясните какую цель вы преследуете.
Ответ написан
romy4
@romy4
Exception handler
$a = [ function(){ echo "asdf";} ];
settype($a,"object");
var_dump($a);


но напрямую Closure никогда php не даёт вызывать. Поэтому $foo = $a->foo; foo();
Ответ написан
Комментировать
Keanor
@Keanor
Ведущий разработчик
Создать объект не используя класс?

Возможно вам анонимные классы из php 7 подойдут :)

gostash.it/ru/stash/65
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы