PHPの関数型プログラミングの基礎をやさしく解説!初心者でもわかる書き方と考え方
生徒
「関数型プログラミングって聞いたことあるけど、PHPでもできるんですか?」
先生
「はい、PHPでも関数型プログラミングを取り入れることができますよ。最近のPHPは、関数を変数のように扱ったり、配列を一気に処理する機能が充実してきています。」
生徒
「でも関数型ってむずかしそうなイメージがあります……」
先生
「たしかに最初は聞きなれない用語が出てきますが、PHPでよく使うarray_mapやarray_filterも関数型プログラミングの一種なんです。今日はやさしく解説していきましょう!」
1. 関数型プログラミングとは?
関数型プログラミングとは、「関数(function)」を使って処理を組み立てる考え方のことです。プログラムの中で関数というのは「何かの作業をする命令のかたまり」です。
関数型では、値を変えたりせずに、入力に対して決まった出力を返す、シンプルで安全な処理が好まれます。これは「副作用を避ける」とも呼ばれ、値を勝手に変えないことでバグを減らす効果があります。
PHPでもこの関数型の考え方を取り入れることで、コードが見やすく、管理しやすくなります。
2. PHPの関数を変数として使う
PHPでは関数を「変数」のように扱うことができます。これを「無名関数(匿名関数)」や「クロージャ」と呼びます。たとえば、以下のように関数を作って、それを変数に代入できます。
$greet = function($name) {
return "こんにちは、" . $name . "さん!";
};
echo $greet("田中"); // こんにちは、田中さん!
3. よく使う関数:array_map
array_mapは、配列のすべての要素に対して、同じ処理をまとめて行う関数です。これは「繰り返し処理」を関数で行う例で、関数型の基本です。
$numbers = [1, 2, 3, 4, 5];
$double = array_map(function($n) {
return $n * 2;
}, $numbers);
print_r($double);
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
このように、array_mapを使えば、1つ1つの値に同じ処理を一気に適用できます。
4. 条件で選ぶ:array_filter
array_filterは、配列の中から条件に合ったものだけを取り出します。たとえば、偶数だけを選ぶときはこうします。
$numbers = [1, 2, 3, 4, 5, 6];
$even = array_filter($numbers, function($n) {
return $n % 2 === 0;
});
print_r($even);
Array
(
[1] => 2
[3] => 4
[5] => 6
)
このように、array_filterで条件に合う要素だけを抜き出すことができます。
5. 複数の関数をつなげる:関数の合成
関数型プログラミングでは「関数をつなげる(合成する)」という考え方も大事です。たとえば「2倍して、それを足す」などの処理を個別の関数にわけて作り、それを順に実行します。
PHPでは明示的な「関数合成」の仕組みはありませんが、関数を複数使うことでそれに近いことができます。
function double($n) {
return $n * 2;
}
function addTen($n) {
return $n + 10;
}
$number = 5;
$result = addTen(double($number));
echo $result; // 20
このように、処理を小さな関数に分けて組み合わせることで、再利用しやすく、わかりやすいコードになります。
6. 変数の値を変えない考え方
関数型プログラミングでは、「一度決めた値を変えない(イミュータブル)」という考え方が重要です。
これは「安全でバグが出にくいコード」にするためです。
PHPでは、配列のようなデータをコピーして新しく作り直すことで、元のデータを壊さずに処理することができます。
7. 初心者がPHPで関数型を学ぶポイント
- 配列に対して
array_mapやarray_filterを使ってみる - 無名関数(function)を変数に代入して使う練習をする
- 小さな処理を関数に分けて、組み合わせる
PHPの関数型プログラミングを使えば、よりシンプルでわかりやすいプログラムが書けるようになります。