PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの無名関数(クロージャ・ラムダ)の基本と実践的な使い方

はじめに:無名関数とは?

無名関数(匿名関数)とは、開発者が名前を付けずに定義する関数のことです。このような関数はクロージャラムダ関数とも呼ばれます。一度だけ使いたい処理がある場合や、その場限りの小さなロジックを記述したい場合に非常に便利です。

特に「クロージャ」と呼ばれる場合、それは定義された環境(スコープ外の変数)を閉じ込めて保持できる無名関数を指します。外部の変数にアクセスする際には use キーワードを指定します。無名関数の最も一般的な用途は、インラインでコールバック関数を作成することです。

基本構文

$var = function ($arg1, $arg2) { return $val; };
  • function キーワードと開き括弧 ( の間には関数名を記述しません。
  • 無名関数の定義は「式」として扱われるため、定義の末尾にはセミコロン ; が必要です。
  • 関数は変数に代入され、後からその変数名を使って呼び出します。
  • 別の関数に引数として渡され、後から呼び出される場合、「コールバック」と呼ばれます。
  • 外側の関数内で return することで、外側の関数の変数にアクセスできるようになります。これが「クロージャ」です。

無名関数の基本的な例

次の例では、引数の3乗を返す無名関数を変数に代入し、呼び出しています。

<?php
$var = function ($x) {return pow($x,3);};
echo "cube of 3 = " . $var(3);
?>

出力結果

cube of 3 = 27

コールバックとしての無名関数

次の例では、組み込み関数 usort() の引数として無名関数を使用しています。usort() は、ユーザーが定義した比較関数に基づいて配列を並べ替える関数です。このように、その場でしか使わない比較ロジックを無名関数で直接記述できるのが大きなメリットです。

<?php
$arr = [10,3,70,21,54];
usort ($arr, function ($x , $y) {
    return $x > $y;
});
foreach ($arr as $x){
    echo $x . "\n";
}
?>

出力結果

3
10
21
54
70

クロージャとしての無名関数(useキーワード)

クロージャとは、use キーワードを使うことで、自分自身のスコープの外にある変数にアクセスできる無名関数のことです。次の例では、外側で定義した $maxmarks を無名関数内で利用しています。

<?php
$maxmarks=300;
$percent=function ($marks) use ($maxmarks) {return $marks*100/$maxmarks;};
echo "marks=285 percentage=". $percent(285);
?>

出力結果

marks=285 percentage=95

まとめ

PHPの無名関数は、変数への代入、コールバック関数としての受け渡し、そして use キーワードによるクロージャとしての活用など、柔軟な使い方が可能です。なお、PHP 7.4以降では変数を自動的にキャプチャできる「アロー関数」(fn($x) => $x * 2; の形式)も導入されており、より簡潔に書ける場面もあります。用途に応じて使い分けることで、コードの可読性と保守性を高められます。

  1. PHPのmt_getrandmax()関数とは?定義・構文・戻り値を実例付きで解説

    mt_getrandmax()関数の定義と用途PHPのmt_getrandmax()関数は、PHPで扱うことのできる最大の整数値を返す関数です。関数名に含まれる「mt」という接頭辞は、メルセンヌ・ツイスタ(Mersenne Twister)という乱数生成アルゴリズムに由来しています。この関数は、mt_rand()関数が生成する乱数の上限値として機能します。そのため、「mt_rand()が返しうる最大の値を事前に把握したい」といった場面で活用できます。なお、戻り値は必ず整数型(int)となります。基本構文mt_getrandmax ( void ) : intパラメータNo.パラメータと説明1こ

  2. Pythonの無名関数(ラムダ式)とは?基本構文と実用的な使い方をわかりやすく解説

    Pythonにおける無名関数とは Pythonにおける無名関数(匿名関数)とは、その名のとおり「関数名を持たない関数」のことです。通常の関数は def キーワードを使って定義しますが、無名関数は lambda キーワードを使って定義します。このため、無名関数は「ラムダ関数」あるいは「ラムダ式」とも呼ばれています。 ラムダ式の基本的な構文 ラムダ式は次のような形式で記述します。 lambda 引数: 式 引数を受け取り、コロン(:)以降の式の評価結果を自動的に返り値として返します。return 文を書く必要がない点が特徴です。 # 通常の関数定義 def square(x): ret