「入門」PHPの無名関数とは?概念や使い方をわかりやすく解説!

プログラミング言語の辞書

PHPの機能の1つに「無名関数(またはクロージャ)」と呼ばれる特殊な機能があります。

無名関数は、名前を持たずに定義される関数であり、一時的な処理を行いたい場合やコールバック関数を利用したい場合などに便利です。この記事では、PHPの無名関数の概念や使い方についてわかりやすく解説します。

忍者CODEの学習は“実践型”!
だから
結果を出せる!

忍者CODE

●初めてIT業界にチャレンジする方
∟はじめての方でも安心して学習できるように、基礎知識から実践的な課題までプロへのロードマップが分かりやすいカリキュラムを採用。
●副業に有利なことを探されている方
∟未経験からでもスキルを習得できる“実践的カリキュラム”と、学習だけでなく受講後もプロのメンターがマンツーマンで徹底的に副業サポートまで行い、受講後は必ず案件をご紹介するプランの副業・案件”保証”プランもあります。
●業界最安級の受講費用で始めやすい
∟月額9,8000円から始められる忍者CODEのプログラミングスクールは業界でも最安級!それでも学習し放題、サポートは無期限・無制限と、プロのメンターとエンジニアを筆頭に、皆さんを徹底的にサポートします。

まずは自分の適性プラン診断から!
適正コース診断

PHPの無名関数とは?

無名関数とは、名前を持たない関数のことを指します。

通常の関数はfunctionキーワードを使って名前を持って定義しますが、無名関数はfunctionキーワードの代わりに「関数自体を変数に代入する」か「直接関数として利用する」ことができます。これにより、一時的な処理を効率的に記述したり、コールバック関数として他の関数に渡すことができます。

無名関数は、主に2つのタイプがあります。

  1. クロージャ(Closure)
    外部の変数を保持したまま処理を実行することができる無名関数です。
  2. ラムダ関数(Lambda Function)
    外部の変数を保持せず、引数のみを利用して処理を実行する無名関数です。

これらの無名関数は、コード内で必要に応じて即座に定義して使用することができます。次に、PHPの無名関数の使いどころや具体的な使い方について見ていきましょう。
全49問!PHP無料問題集はコチラ▶

PHPの無名関数の使いどころや使い方

PHPの無名関数は、特定の処理を実行する際に一時的な関数を定義する必要がある場面や、コールバック関数として他の関数に渡す必要がある場面で非常に便利です。ここでは、初心者向けにPHPの無名関数の使いどころや使い方について解説します。

コールバック関数としての利用

無名関数は、関数の引数として直接渡すことができます。

例えば、配列の要素を処理する際に特定の処理を行いたい場合に、無名関数を使用します。array_map()やarray_filter()などの関数に、無名関数を渡すことで、要素ごとに個別の処理を行うことができます。

$numbers = [1, 2, 3, 4, 5];

// 無名関数を使用して、各要素に2を掛ける
$result = array_map(function($n) {
  return $n * 2;
}, $numbers);
// $resultは[2, 4, 6, 8, 10]となる

クロージャとしての利用

クロージャは、無名関数が定義された時点での状態を保持し、後から呼び出される際にその状態を引き継ぐ特殊な無名関数です。外部の変数を利用しつつ、その変数の値を後から変更したり参照したりできます。

function createCounter() {
  $count = 0;
  return function() use (&$count) {
    return ++$count;
  };
}

$counter = createCounter();
echo $counter(); // 1
echo $counter(); // 2
echo $counter(); // 3

無名関数の即時実行

無名関数は、定義と同時に直ちに実行することができます。これは、一時的な処理を行いたい場合や、変数のスコープを制限したい場合に役立ちます。

$result = (function() {
  $name = 'John';
  return 'Hello, ' . $name;
})();
// $resultには'Hello, John'が格納される

コールバック関数の代用として

無名関数は、関数の中で関数を定義することができるため、特定の処理を再利用せずにその場で定義することができます。

function processItems(array $items, callable $callback) {
  foreach ($items as $item) {
    // コールバック関数を呼び出す
    $callback($item);
  }
}

// 無名関数を使ってコールバック関数を定義
processItems([1, 2, 3], function($item) {
  echo $item * 2 . ' ';
});
// 出力: 2 4 6

PHPの無名関数は、これらの使いどころや使い方によって柔軟に利用できるため、多様なシナリオで役立つ重要な機能と言えます。上記の例を参考に、自分のプロジェクトで無名関数を上手に活用してみてください。

プログラミングスクールなら
忍者CODE

適正コース診断2

無名関数の使用例

無名関数は、さまざまな場面で便利に活用できる機能です。ここでは、初心者向けにいくつかの具体的な使用例を示します。

配列の要素を処理する例

無名関数を使用して、配列の要素に対して特定の処理を行いたい場合があります。例えば、配列内の数値を2倍にしたり、文字列を大文字に変換したりする処理があります。

$numbers = [1, 2, 3, 4, 5];

// 無名関数を使用して、各要素に2を掛ける
$result = array_map(function($n) {
return $n * 2;
}, $numbers);
// $resultは[2, 4, 6, 8, 10]となる

イベントハンドリングの例

Webアプリケーションでは、さまざまなイベントに対して特定の処理を実行する必要があります。無名関数を使用することで、イベントハンドラとして動的に関数を定義できます。

function onClickButton($callback) {
  // ボタンがクリックされたときにコールバック関数を実行する
  if (isset($_POST['submit'])) {
    $callback();
  }
}

// 無名関数を使ってボタンがクリックされたときに実行する処理を定義
onClickButton(function() {
  echo "ボタンがクリックされました!";
});

クロージャを使ったカウンターの例

クロージャは外部の変数を保持したまま処理を行うことができるため、カウンターなどに利用できます。

function createCounter() {
  $count = 0;
  return function() use (&$count) {
    return ++$count;
  };
}

$counter = createCounter();
echo $counter(); // 1
echo $counter(); // 2
echo $counter(); // 3

即時実行の例

無名関数を定義と同時に実行することで、一時的な処理をシンプルに行うことができます。

$result = (function() {
  $name = 'John';
  return 'Hello, ' . $name;
})();
// $resultには'Hello, John'が格納される

これらの例は、無名関数がどのように状況に合わせて柔軟に利用できるかを示しています。無名関数は、コードの再利用性を高めたり、コールバック処理を簡潔に記述したりするのに役立ちます。
全49問!PHP無料問題集はコチラ▶

まとめ

PHPの無名関数は、名前を持たずに定義される特殊な関数であり、一時的な処理やコールバック関数の実装に非常に便利です。

コールバック関数として他の関数に渡したり、クロージャとして外部の変数を保持しつつ処理を実行したりすることができます。

また、無名関数は即時実行も可能で、必要に応じて簡潔に定義して利用できます。柔軟性と多機能性を持つPHPの無名関数は、開発の効率化やコードの再利用性の向上に貢献する重要な機能です。

挫折することなくエンジニアを目指すなら

独学?スクール?

これからHTMLやCSSなどといったプログラミング言語の学習を始めようと考えている方、または最近学習を始めた方がいらっしゃるかと思います。

ただ、実際に学習を始めるとなると

1人で学習を進められるかな…
どこをゴールにしていいかわからない…
挫折してしまわないかな…

このように不安な気持ちになる方もいますよね。

たしかに、何かわからないことが出てきたとき、エラーが解決できないとき、誰かに相談できる環境がないことが理由でプログラミング言語の学習を挫折する方が多くいます。

実際にプログラミング言語初学者が挫折をする1番の理由は「不明点が発生した際に気軽に相談できる環境がない」という実態があります。

それだけ学習する環境が大事だということです。

そんな背景があるからこそ、プログラミングの勉強をする際にスクールを選ぶ方が多いのが事実です。

プログラミングスクールに通う理由は他にもあり

・確実にスキルを身に着けたい
・効率良く学習を進めたい
・モチベーションの維持にもつながりそう
・以前に独学で挫折した経験がある
このように「確実に!」「効率良く!」といった声もよく上がります。
やはり途中で挫折してしまったり、どこを目指しているのかわからなくなったりした場合、「プログラミングを学習することは難しい」と認識してしまい、その後のスキル習得を諦めてしまう可能性が非常に高くなります。
このようなことから、社会人で時間もそこまでないため短期間でスキルを習得したい人や独学で進めるのが不安な人が効率性や確実性を求め、プロの講師に相談できる環境が用意されているプログラミングスクールを選択するのがわかります。
「転職をしたい」「副業で稼げるようになりたい」という理由でプログラミング言語を学び始めたとき、わからない箇所を飛ばしてそのままに放置して学習を進めたとしても、目標とする転職や副業が実現するほどのスキルが身につかなければ多くの時間を費やして何も得られないという結果になります。
ですので、1人でHTMLやCSSなどといったプログラミングスキルの習得ができるか不安な方は多少の費用をかけてでも、不明点をすぐに相談・解決できる環境や効率良く学習できる有料サービスを選ぶのがベストだと言えます。
そこでおすすめしたいのが「忍者CODE」です。
忍者CODEをおすすめする1番の理由は「業界最安級の金額でありながら圧倒的学習ボリュームと半永久サポートを提供している」ところにあります。
上記でお伝えしたように、初学者の多くは独力で不明点や問題点を解決できないためにプログラミングの学習を挫折しています。そのため、初学者が経験豊富なプロのエンジニアに相談できない環境下でプログラミングスキルの習得をするのは難易度が高いと言えます。
ですが、忍者CODEでは
・チャットでいつでも、無制限で質問可能
・学習者同士でつながれるコミュニティへの招待
などといったサポート体制を設けているため、学習を進めていく中で出てきた問題点や不明点をスムーズに解決しながら、挫折することなくプログラミングスキルの習得が可能です。
また、忍者CODEでは動画コンテンツにて学習を進めていくため、スッと頭に入ってきやすいようになっているのも特徴です。
未経験でも挫折させないオンラインスクールとして、受講生に寄り添った学習コンテンツを提供している忍者CODEをより詳しく知りたい方はぜひ公式サイトをご覧ください。