doutangdan3588 2017-01-17 15:50
浏览 180

php - 将方法转换为闭包

I want to know is there any way to convert a method to a closure type in 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' );

this is just for example but i cant use callable and then use [$obj,'myMethod'] my class is very complicated and i cant change anything just for a closure type. so i need to convert a method to a closure. is there any other way or i should use this?

$obj->myOtherMethod( function($msg) use($obj){ 
   $obj->myMethod($msg);
} );

i wish to use a less memory and resource consumer way. is there such a solution?

  • 写回答

1条回答 默认 最新

  • dongyan7876 2017-06-25 23:07
    关注

    Since PHP 7.1 you can

    $closure = Closure::fromCallable ( [$obj, 'myMethod'] )

    Since PHP 5.4 you can

    $method = new ReflectionMethod($obj, 'myMethod'); $closure = $method->getClosure($obj);

    But in your example myMethod() accepts an argument, so this closure should be called like this $closure($msg).

    评论

报告相同问题?

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能