
Eslo
PHPのクロージャについて基本的な概念から応用的な使い方まで解説します!
この記事でわかること
- Closureの使い方
- 実務でよく使用されるClosure
PHPのClosure(クロージャ)について解説
PHPのクロージャ(Closure)は、無名関数の一種であり、関数を変数として扱ったり、動的に作成したりすることができます。クロージャは主に関数内で別の関数を作成し、その状態を保持するために使用されます。

PHP: Closure - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites i...
以下では、PHPのクロージャについて基本的な概念から応用的な使い方まで解説します。
クロージャの使い方
1. 基本的な使い方
クロージャはfunction
キーワードを使用して作成されます。以下に基本的な例を示します。
<?php
$greet = function($name) {
return "Hello, $name!";
};
echo $greet("Eslo"); // 出力: Hello, Eslo!
このように、無名関数を変数に代入し、それを呼び出すことができます。
2. use
キーワードによる変数のキャプチャ
クロージャでは、スコープ外の変数をuse
キーワードでキャプチャして使用することができます。
<?php
$message = "World";
$greet = function() use ($message) {
return "Hello, $message!";
};
echo $greet(); // 出力: Hello, World!
注意: use
でキャプチャされた変数はデフォルトで値渡し(コピー)されます。変数の値を変更する必要がある場合は、参照渡し(&
を使用)を利用します。
<?php
$count = 0;
$increment = function() use (&$count) {
$count++;
};
$increment();
$increment();
echo $count; // 出力: 2
3. クラス内でのクロージャの使用
クロージャはクラス内でも使用できます。$this
を使用する場合は、クロージャをbindTo
メソッドでバインドするか、クラスのメソッドとして定義します。
<?php
class Greeter {
private $greeting = "Hello";
public function createGreetingClosure($name) {
return function() use ($name) {
return "$this->greeting, $name!";
};
}
}
$greeter = new Greeter();
$closure = $greeter->createGreetingClosure("Eslo");
echo $closure(); // 出力: Hello, Eslo!
4. 実践的な使用例
コールバック関数としての使用:
クロージャは、配列操作やイベントリスナーなど、コールバック関数としてよく使用されます。
<?php
$numbers = [1, 2, 3, 4, 5];
$squaredNumbers = array_map(function($n) {
return $n * $n;
}, $numbers);
print_r($squaredNumbers);
// 出力: Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
カスタムソートが実務でよく使用されます。
カスタムソート:
<?php
$people = [
["name" => "Eslo", "age" => 30],
["name" => "Alice", "age" => 25],
["name" => "Bob", "age" => 35]
];
usort($people, function($a, $b) {
return $a['age'] <=> $b['age'];
});
print_r($people);
終わりに
PHPのクロージャは、柔軟で強力な機能を提供します。特に、変数のスコープを制御したり、動的な関数を作成したりする場面で役立ちます。基本的な使い方を理解した後は、応用例を試してみて、コードの再利用性や簡潔さを向上させてみましょう。