php如何调用由数组转换成的类中的方法?
问题复现代码如下:
$arr["t"]="123";
$arr["fn"]=function(){
echo "这个函数调用了";
};
$obj=(object)$arr;
foreach($obj as $f=>$v){ //遍历类中所有公共属性
if($f=="fn"){
$v();//成功调用到类中的函数
}
}
echo $obj->t;//这样调用类中的变量是没问题的
$obj->fn();//但调用类中的方法不行
我用foreach遍历类中所有公共属性,用判断属性名的方法可以调用这个由数组转换成的类中的函数,但不能每次调用函数时都写个循环。
用->
调用类中的变量是没问题的,但类中的公开方法应该怎么调用(不写循环情况下)?
感觉这好像是基础问题,但尝试了各种办法都找不到答案
因为当你使用
$obj->fn()
的时候,这相当于是在调用$obj
对象上的fn
方法,而这里显然没有fn
这个结构方法。而当你使用 foreach 时,实际上
$obj->fn
他返回的是一个闭包函数,是闭包可以被调用,所以在这里只需要改成($obj->fn)();
的形式调用就可以了。