first-class callable記法(…)で関数を値として渡す
PHP 8.1で入ったfirst-class callable記法、地味ですがコールバックの受け渡しが読みやすくなります。関数やメソッドを「呼ぶ」のではなく「値として取り出す」ための書き方です。
従来の文字列・配列指定
これまでコールバックは文字列や配列で渡していました。
$fn = 'strlen'; // 関数名を文字列で
$fn = [$obj, 'method']; // メソッドを配列で
$fn = ['ClassName', 'staticFn']; // 静的メソッド
これはタイプミスしても実行時までエラーにならず、IDEの補完も効きませんでした。
新記法
$fn = strlen(...); // 関数
$fn = $obj->method(...); // メソッド
$fn = ClassName::staticFn(...); // 静的メソッド
$lengths = array_map(strlen(...), $words);
末尾に(...)を付けると「今は呼ばずにClosureとして取り出す」という意味になります。存在しない関数名ならその場でエラーになりますし、補完も効きます。
まとめ
コールバックを渡す場面では、文字列指定より(...)記法のほうが安全で読みやすいです。中身は普通のClosureになるので、変数に入れて使い回すこともできます。array_mapやusortの引数を書くときに思い出すと、コードが一段すっきりします。