我想知道有什么方法可以将方法转换为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' );
Run Code Online (Sandbox Code Playgroud)
这仅是示例,但是我不能使用callable,然后使用[$obj,'myMethod']
我的类非常复杂,并且我不能仅为闭包类型更改任何内容。所以我需要将方法转换为闭包。还有其他方法还是我应该使用此方法?
$obj->myOtherMethod( function($msg) use($obj){
$obj->myMethod($msg);
} );
Run Code Online (Sandbox Code Playgroud)
我希望使用较少的内存和资源消耗方式。有没有这样的解决方案?
Jso*_*owa 13
PHP 8.1 引入了一种从函数和方法创建闭包的更短方法:
$fn = Closure::fromCallable('strlen');
$fn = strlen(...); // PHP 8.1
$fn = Closure::fromCallable([$this, 'method']);
$fn = $this->method(...); // PHP 8.1
$fn = Closure::fromCallable([Foo::class, 'method']);
$fn = Foo::method(...); // PHP 8.1
Run Code Online (Sandbox Code Playgroud)
RFC:PHP RFC:一流的可调用语法
自 PHP 7.1 起,您可以
$closure = Closure::fromCallable ( [$obj, 'myMethod'] )
自 PHP 5.4 起,您可以
$method = new ReflectionMethod($obj, 'myMethod');
$closure = $method->getClosure($obj);
但是在你的例子中 myMethod() 接受一个参数,所以这个闭包应该像这样调用$closure($msg)。