【发布时间】:2017-01-17 15:50:17
【问题描述】:
有没有办法在 PHP 中将方法转换为闭包类型?
class myClass {
public function myMethod($param) {
echo $param;
}
public function myOtherMethod(Closure $param) {
// Do something here...
}
}
$obj = new myClass();
$obj->myOtherMethod((closure) '$obj->myMethod');
这只是一个例子,但我不能使用 callable 然后使用[$obj,'myMethod']。
我的类非常复杂,我不能只为闭包类型改变任何东西。
所以我需要将方法转换为闭包。还有其他方法还是我应该使用它?
$obj->myOtherMethod(function($msg) use($obj) {
$obj->myMethod($msg);
});
我希望使用更少的内存和更少的资源消耗。有没有这样的解决方案?
【问题讨论】:
-
Closures没有性能问题。您可以使用您的试用版。这样做是可以的。 -
关于
use a less memory的小注释。 php$var1 = $var2;中的每个副本首先是一个参考,只要内容没有改变。这是直接复制$var1 = trim($var2); -
谢谢,你的意思是没有别的办法了?
-
如果你的classmethod需要一个
Closure作为参数,那么这里使用function($arg) use($obj){ }就可以了,你不必在这里考虑performance,在这种情况下它只是micro-optimizations.也许还有另一种方法,但只要你不想改变你的班级,这是我最好的解决方案,使用Closures。既然你这里只有一个例子,我只能给出一个一般性的答案。