这就是我所拥有的
$x = new \stdClass();
$x->cast = function($y){
return $y;
};
当我尝试执行它时
$x->cast(5);
我收到此错误
致命错误:调用未定义的方法stdClass :: cast()
我该如何解决?
答案 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调用此闭包