Laravelの関数見たら疑問を持ちました
$sorted_user = $users->sortBy('sort_number'); $sorted_user2 = $users->sortBy(function ($user) { return $user->sort_number; }); dd($sorted_user == $sorted_user2); //true
あれ?なんで、第一引数が、文字列だったりcallback関数だったり、
どちらでも動いているのだろう?
元コードを読んだらこれでした。
文字列を関数化
valueRetrieverという関数が内部で使われていました。
/** * Get a value retrieving callback. * * @param string $value * @return callable */ protected function valueRetriever($value) { if ($this->useAsCallable($value)) { return $value; } return function ($item) use ($value) { return data_get($item, $value); }; }
最初の例だと、$valueが無名関数と文字列どっちも入るのですが、
無名関数ならuseAsCallableがtrueでそのままreturn。
もし文字列なら、その下で無名関数に変換してからreturnしてくれているのです。
なるほど、こうやって変換すれば、型変換だけでは足りない変換にも対応できるのですね。
勉強になりますLaravelさんφ(..)メモメモ