Pregunta

I can do this with anonymous function

 $func = function() {
      return "Hello World";
 };
 var_dump($func());

However, I cannot do this

$namespace->func = function() {
      return "Hello World";
 };
 var_dump($namespace->func());

I will get this error

Call to undefined method stdClass

The workaround that I have discovered so far is to use another variable

$temp = $namespace->func;
var_dump($temp());

Is there a way that I can do it in one line?

¿Fue útil?

Solución

You can use __invoke() :

// declare $namespace to be conform to strict standards
$namespace = new StdClass();

$namespace->func = function() {
      return "Hello World";
 };
var_dump($namespace->func->__invoke());

That's because even if a property func exists which is a closure, PHP will not check if it is a closure and call it.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top