问题
我正在玩一个Laravel项目,想看看是否可以使用闭包来实现我的排序接口,我注意到当我使用dd()
打印我的闭包时,它还会显示创建该闭包的类作为属性。
简化后的代码
// in my Order model class, i have a function that will return a closure
public static function defaultSortFunction(){
$sortColumn = property_exists(self::class,'defaultSortingColumn') ? self::$defaultSortingColumn : 'created_at';
return function($p,$n)use($sortColumn){
return $p->$sortColumn <=> $n->$sortColumn;
};
}
// in one of my controller I use for testing, I added these 2 methods for testing
public function index(){
$sortFunction = Order::defaultSortFunction();
$this->someOtherFunction($sortFunction);
return 'done';
}
private function someOtherFunction($fn){
dd($fn);
// $scopeModel = get_class($fn); => Closure
// example of how I can use this value later
// $scopeModel::take(10)->get()->sort($fn);
}
someOtherFunction()
中 dd()
的结果为:^ Closure($p, $n) {#1308 ▼
class: "App\Order"
use: {▼
$sortColumn: "created_at"
}
}
问题
从dd()
的结果可以看出,闭包具有一个属性,表明它是在类App\Order
中定义的。是否有任何方法可以访问这个值?
我已经尝试过get_class($fn)
,但正如预期的那样,它会返回"Closure"
,如果我尝试$fn->class
,则会出现错误信息Closure object cannot have properties
。
$reflectionClosure->getClosureThis()
也可以用来获取闭包绑定的实例(内部$this
)。 - mvorisek