カテゴリ: PHP 更新日: 2026/03/03

PHPの関数型プログラミングの基礎をやさしく解説!初心者でもわかる書き方と考え方

PHP の関数型プログラミングの基礎
PHP の関数型プログラミングの基礎

先生と生徒の会話形式で理解しよう

生徒

「関数型プログラミングって聞いたことあるけど、PHPでもできるんですか?」

先生

「はい、PHPでも関数型プログラミングを取り入れることができますよ。最近のPHPは、関数を変数のように扱ったり、配列を一気に処理する機能が充実してきています。」

生徒

「でも関数型ってむずかしそうなイメージがあります……」

先生

「たしかに最初は聞きなれない用語が出てきますが、PHPでよく使うarray_maparray_filterも関数型プログラミングの一種なんです。今日はやさしく解説していきましょう!」

1. 関数型プログラミングとは?仕組みとメリットを解説

1. 関数型プログラミングとは?仕組みとメリットを解説
1. 関数型プログラミングとは?仕組みとメリットを解説

関数型プログラミングとは、一言でいうと「関数(function)」を部品のように組み合わせて、一つの大きなプログラムを作る考え方のことです。プログラミングにおける関数とは、「何かを入れると、決まった計算をして結果を返してくれる魔法の箱」のようなものだとイメージしてください。

この考え方の最大の特徴は、「データの状態を勝手に書き換えない」というルールにあります。これを専門用語で「参照透過性」や「副作用を避ける」と呼びますが、未経験の方には少し難しいですよね。簡単に言うと、「同じデータを入れれば、いつでも、何度でも、必ず同じ結果が返ってくる」という安心設計のことです。

【例え話】料理のレシピで考えてみよう!
「野菜を切る」という関数があるとします。
  • 一般的な書き方:まな板の上の野菜を直接切り、元の状態(丸ごとの野菜)を消してしまう。
  • 関数型の書き方:丸ごとの野菜はそのままに、新しく「切られた状態の野菜」をトレイに用意する。
このように、元のデータを壊さないことで「いつの間にかデータが変わってバグが起きた!」というトラブルを防げるのが、関数型プログラミングの強みです。

例えば、簡単な計算を関数型っぽく書くと以下のようになります。


// 入力した数値を3倍にして返すだけのシンプルな関数
function triple($number) {
    return $number * 3;
}

$input = 10;
$output = triple($input); // $input(10)は変わらず、新しい結果(30)が作られる

echo $output; // 30

このように、一つ一つの処理を「入力を加工して新しい結果を出す」という独立したパーツに分けることで、コードが整理され、後から見返したときや複数人で開発するときに、非常に理解しやすいプログラムになります。

2. PHPの関数を変数として使う

2. PHPの関数を変数として使う
2. PHPの関数を変数として使う

PHPでは関数を「変数」のように扱うことができます。これを「無名関数(匿名関数)」や「クロージャ」と呼びます。たとえば、以下のように関数を作って、それを変数に代入できます。


$greet = function($name) {
    return "こんにちは、" . $name . "さん!";
};

echo $greet("田中"); // こんにちは、田中さん!

3. よく使う関数:array_map

3. よく使う関数:array_map
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

4. 条件で選ぶ:array_filter
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. 複数の関数をつなげる:関数の合成

5. 複数の関数をつなげる:関数の合成
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. 変数の値を変えない考え方

6. 変数の値を変えない考え方
6. 変数の値を変えない考え方

関数型プログラミングでは、「一度決めた値を変えない(イミュータブル)」という考え方が重要です。

これは「安全でバグが出にくいコード」にするためです。

PHPでは、配列のようなデータをコピーして新しく作り直すことで、元のデータを壊さずに処理することができます。

7. 初心者がPHPで関数型を学ぶポイント

7. 初心者がPHPで関数型を学ぶポイント
7. 初心者がPHPで関数型を学ぶポイント
  • 配列に対してarray_maparray_filterを使ってみる
  • 無名関数(function)を変数に代入して使う練習をする
  • 小さな処理を関数に分けて、組み合わせる

PHPの関数型プログラミングを使えば、よりシンプルでわかりやすいプログラムが書けるようになります。

まとめ

まとめ
まとめ

この記事では、PHPで関数型プログラミングを実践するための基本的な考え方とテクニックについて、初心者向けにやさしく解説しました。関数型プログラミングというと少し難しく感じるかもしれませんが、実はPHPでもarray_maparray_filterといった関数を使うことで、身近に体験することができます。

特に、配列に対して繰り返し処理を行う場面では、foreachなどを使うよりも、array_mapを使う方が見た目にもスッキリしていて、メンテナンス性も向上します。また、特定の条件に合った要素だけを取り出すarray_filterは、非常に強力な道具となりえます。

さらに、無名関数やクロージャを使って、関数を変数に代入する技術も紹介しました。これは、関数型の特徴である「関数を値のように扱う」書き方につながり、柔軟なコーディングスタイルを実現する鍵になります。

処理を小さな関数に分割して、組み合わせて使う関数の合成も大切な考え方のひとつです。これは、PHPだけでなく多くの言語でプログラミングの質を上げるための重要な手法です。

実際のPHPプログラムで、以下のように複数の関数を組み合わせて処理することもできます。


function square($x) {
    return $x * $x;
}

function minusOne($x) {
    return $x - 1;
}

$start = 4;
$result = square(minusOne($start)); // (4 - 1)^2 = 9
echo $result;

このように、関数型の発想を活かしてコードを書くことで、「可読性が高く」「バグが起きにくい」安全なプログラムを作ることができるようになります。

最後に、関数型プログラミングの大事なポイントとして「副作用を避ける」「イミュータブルな考え方を意識する」ことが挙げられます。PHPはオブジェクト指向の側面も強い言語ですが、関数型のスタイルをうまく取り入れることで、よりモダンでスケーラブルなコードが書けるようになるでしょう。

はじめのうちは難しく感じるかもしれませんが、少しずつ試して慣れていくことで、必ず成長につながります。まずは、array_mapや無名関数から挑戦してみてください。

先生と生徒の振り返り会話

生徒

「関数型プログラミングって聞いて難しそうだと思ってたけど、array_mapやarray_filterってもう使ってました!」

先生

「そうですね。PHPでは関数型の考え方が意外と身近なんです。無名関数も一度使ってみると、その便利さが実感できると思いますよ。」

生徒

「関数を変数みたいに代入できるのも新鮮でした。これで柔軟に処理を組み立てられるようになりそうです!」

先生

「はい、小さな関数を組み合わせるのは再利用にもつながりますし、コードも読みやすくなります。ぜひ日々のコードで取り入れてみてくださいね。」

生徒

「まずは、array_mapから実際に使って慣れていこうと思います!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPで関数型プログラミングとは具体的にどういう考え方なのですか?

PHPでの関数型プログラミングとは、状態を持たず副作用を避けながら、関数を使って処理を組み立てるスタイルです。入力に対して決まった出力を返す純粋関数や、配列処理に便利なarray_mapやarray_filterを活用します。

PHPのarray_map関数の基本的な使い方を教えてください。

PHPのarray_map関数は、配列のすべての要素に対して同じ関数を適用する関数です。例えば、配列のすべての値を2倍にする処理などがarray_mapで簡潔に記述できます。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Python
Pythonのカスタム例外を作成する方法を完全解説!初心者でもわかる独自のExceptionクラス入門
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPの真偽値と条件判定をやさしく解説!初心者でもわかるempty・isset・is_nullの使い方
New4
PHP
PHP の file_get_contents() を使ってファイルを読み込む方法!初心者でもできる簡単なファイル操作
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.4
Java&Spring記事人気No4
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.5
Java&Spring記事人気No5
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.6
Java&Spring記事人気No6
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.7
Java&Spring記事人気No7
PHP
初心者向けPHP の MySQL のデータを更新する方法(UPDATE 文)完全ガイド
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文を使った条件処理の書き方を完全ガイド!初心者でもわかる使い方