我想知道有没有办法在php中将方法转换为闭包类型?
class myClass{
public function myMethod($param){
echo $param;
}
public function myOtherMethod(Closure $param){
// do somthing here ...
}
}
$obj = new myClass();
$obj->myOtherMethod( (closure) '$obj->myMethod' );
这只是举例,但我不能使用callable,然后使用[$obj,'myMethod']
我的课非常复杂,我只能为封闭类型改变任何东西。
所以我需要将方法转换为闭包。
有没有其他方法或我应该使用它?
$obj->myOtherMethod( function($msg) use($obj){
$obj->myMethod($msg);
} );
我希望使用更少的内存和资源消费方式。有这样的解决方案吗?
答案 0 :(得分:0)
从PHP 7.1开始,你可以
$closure = Closure::fromCallable ( [$obj, 'myMethod'] )
自PHP 5.4起,你可以
$method = new ReflectionMethod($obj, 'myMethod');
$closure = $method->getClosure($obj);
但是在你的例子中,myMethod()接受一个参数,所以应该像这个$closure($msg)
一样调用这个闭包。