PHP调用闭包在stdClass下

时间:2014-04-16 21:54:39

标签: php

这就是我所拥有的

$x = new \stdClass();
$x->cast = function($y){
    return $y;
};

当我尝试执行它时

$x->cast(5);

我收到此错误

  

致命错误:调用未定义的方法stdClass :: cast()

我该如何解决?

2 个答案:

答案 0 :(得分:1)

一般来说,如果你想将函数附加到对象上,那么创建一个类会更好 但如果你真的想要这个,那么这应该有效:

$x = new \stdClass();
$x->cast = function($y){
    return $y;
};

$y = $x->cast;

var_dump($y(5));

call_user_func($x->cast, 5);

答案 1 :(得分:1)

问题是您要在stdClass内定义一个变量并将其分配给闭包函数

如果您想了解为什么调用$x->cast(5);不起作用的原因,是因为PHP正在寻找名为“ cast”的类的方法,但没有这样的 method ,而是只有一个变量名为“ cast”,变量和方法是PHP的两件事

对于要实现的工作,您需要调用(仅PHP 7+语法)

($x->cast)(5);

或者对于PHP 5.3 +

$x->cast->__invoke(5)

告诉编译器您首先要访问变量(返回闭包),然后使用参数5调用此闭包