php - 将方法转换为闭包

时间:2017-01-17 15:50:17

标签: php oop callback

我想知道有没有办法在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);
} );

我希望使用更少的内存和资源消费方式。有这样的解决方案吗?

1 个答案:

答案 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)一样调用这个闭包。