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の引数を書くときに思い出すと、コードが一段すっきりします。

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です