um exemplo real de onde fn é mais útil:
$user = User::query()
->when($id, fn ($query) => $query->where('id', $id))
->when($email, fn ($query) => $query->where('email', $email))
->when($document, fn ($query) => $query->where('document', $document))
->first();
ficou uma sintaxe limpa, fácil de entender
agora considere o seguinte código:
$user = User::query()
->when($id, function ($query) use ($id) {
return $query->where('id', $id);
})
->when($email, function ($query) use ($email) {
return $query->where('email', $email);
})
->when($document, function ($query) use ($document) {
return $query->where('document', $document);
})
->first();
Nesse caso ficou muito pior usando o function completo.
Usar ou não usar a funcionalidade depende muito mais de onde está sendo usada do que da funcionalidade em si.
Odeio if ternário ?:
mas é muito melhor fazer algo assim:
return (permissions.length > 0) ? "admin" : "user"
do que escrever o if completo.
Tudo depende do contexto