カテゴリ: PHP 更新日: 2026/10/04

PHPで関数を小さく分ける方法!保守しやすい処理分割の基本

PHPで関数を小さく分ける方法!保守しやすい処理分割の基本
PHPで関数を小さく分ける方法!保守しやすい処理分割の基本

新人と先輩の会話形式で理解しよう

新人

「関数を小さく分ける方法を学ぶとき、サンプルを写すだけで終わらないようにしたいです。」

先輩

「それなら、繰り返す処理を小さな関数へ分ける練習という具体例に置き換えて考えるといいですよ。使う値、処理、表示結果が見えると理解しやすくなります。」

新人

「コードのどこを変えれば応用できるかも知りたいです。」

先輩

「では、PHPを中心に、入力チェック、表示、関数化、ログまで順番に見ていきましょう。」

1. 繰り返す処理を小さな関数へ分ける練習で関数に分ける処理を見つける

1. 繰り返す処理を小さな関数へ分ける練習で関数に分ける処理を見つける
1. 繰り返す処理を小さな関数へ分ける練習で関数に分ける処理を見つける

関数を小さく分ける方法は、用語だけを見ると難しく感じますが、実際には「どの値を受け取り、どの形へ整えて、どこへ表示または保存するか」を決める作業です。この記事では 繰り返す処理を小さな関数へ分ける練習 を題材に、手を動かしながら流れを確認します。


<?php
$items = ["PHP基礎", "フォーム処理", "DB連携"];

foreach ($items as $item) {
    echo htmlspecialchars($item, ENT_QUOTES, "UTF-8") . "<br>";
}
?>

2. PHPを使った小さな関数の基本形

2. PHPを使った小さな関数の基本形
2. PHPを使った小さな関数の基本形

まずは最小コードで動きを見ます。大きな機能にする前に、PHP の役割、入力値、出力結果を小さく確認しておくと、あとでエラーが出たときにも原因を追いやすくなります。


<?php
$value = trim($_POST["value"] ?? "");
$errors = [];

if ($value === "") {
    $errors[] = "値を入力してください。";
}
if (mb_strlen($value, "UTF-8") > 100) {
    $errors[] = "100文字以内で入力してください。";
}

if ($errors) {
    foreach ($errors as $error) {
        echo htmlspecialchars($error, ENT_QUOTES, "UTF-8") . "<br>";
    }
}
?>

3. 引数・戻り値・型宣言を先に決める

3. 引数・戻り値・型宣言を先に決める
3. 引数・戻り値・型宣言を先に決める

実務では、入力値が空だったり、想定外の文字列が入ったりします。ここを先にチェックしておくと、画面崩れ、DBエラー、意図しない処理をかなり減らせます。


<?php
function escapeHtml(string $value): string
{
    return htmlspecialchars($value, ENT_QUOTES, "UTF-8");
}

$rows = [
    ["title" => "PHPサンプル", "status" => "公開"],
    ["title" => "入力チェック", "status" => "確認中"],
];
?>

<table>
<?php foreach ($rows as $row): ?>
    <tr>
        <td><?php echo escapeHtml($row["title"]); ?></td>
        <td><?php echo escapeHtml($row["status"]); ?></td>
    </tr>
<?php endforeach; ?>
</table>

4. バリデーションや日付変換を共通化する

4. バリデーションや日付変換を共通化する
4. バリデーションや日付変換を共通化する

PHPで画面へ出す値は、基本的に表示直前でエスケープします。自分で用意した配列でも、将来フォームやDBから来る値へ変わる可能性があるため、安全な表示を習慣にします。


<?php
function normalizeText(?string $value): string
{
    $value = trim($value ?? "");
    return mb_convert_kana($value, "s", "UTF-8");
}

$keyword = normalizeText($_GET["keyword"] ?? "");
echo htmlspecialchars($keyword, ENT_QUOTES, "UTF-8");
?>

5. 例外を投げる関数と結果を返す関数を分ける

5. 例外を投げる関数と結果を返す関数を分ける
5. 例外を投げる関数と結果を返す関数を分ける

同じ処理が2回以上出てきたら、関数化を考えます。短い関数へ切り出すと、名前から目的が分かり、テストや修正もしやすくなります。


<?php
try {
    $result = ["ok" => true, "message" => "処理が完了しました。"];
    if (!$result["ok"]) {
        throw new RuntimeException($result["message"]);
    }
} catch (Throwable $e) {
    error_log($e->getMessage());
    echo "エラーが発生しました。";
}
?>

6. コールバックや再帰を使う場面を見極める

6. コールバックや再帰を使う場面を見極める
6. コールバックや再帰を使う場面を見極める

エラー対策では、利用者へ見せるメッセージと、開発者が調査するログを分けます。画面にはやさしい文言、ログには日時やURLなど調査に必要な情報を残すと運用しやすくなります。


<?php
$log = [
    "time" => date("Y-m-d H:i:s"),
    "uri" => $_SERVER["REQUEST_URI"] ?? "",
    "ip" => $_SERVER["REMOTE_ADDR"] ?? "",
];

error_log(json_encode($log, JSON_UNESCAPED_UNICODE));
?>

7. 繰り返す処理を小さな関数へ分ける練習として使える関数セット

7. 繰り返す処理を小さな関数へ分ける練習として使える関数セット
7. 繰り返す処理を小さな関数へ分ける練習として使える関数セット

繰り返す処理を小さな関数へ分ける練習として使うなら、コードを1つの流れとして読めることが大切です。入力、処理、表示、エラー処理が離れすぎると、初心者は原因を見失いやすくなります。

まずは小さく動く形を作り、あとからDB保存、メール送信、ログ出力、テストを足していくと、無理なく実務的なコードへ育てられます。

8. 関数名だけで目的が伝わる書き方

8. 関数名だけで目的が伝わる書き方
8. 関数名だけで目的が伝わる書き方

関数を小さく分ける方法を復習するときは、サンプルの変数名だけを変えるのではなく、入力値の種類、空データ、エラー時の表示まで変えて試してみましょう。そこまで確認すると、ただ動くコードから、壊れにくいPHPコードへ近づきます。

次の練習では、繰り返す処理を小さな関数へ分ける練習に検索条件、保存処理、権限チェックのどれか1つを追加してみてください。記事ごとのテーマを小さな機能へ落とし込むほど、学習記事としても実務メモとしても価値が出ます。

コメント
コメント投稿は、ログインしてください

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

PHP の関数の記事一覧へ
新着記事
New1
Copilot
CopilotでPHPコード補完を始める方法!VS Codeで最初の補完を使う手順
New2
PHP
PHPでお問い合わせメールを送信する方法!フォーム連携と本文テンプレート
New3
PHP
PHPでPHPUnitの最初のテストを書く方法!関数テストの基本
New4
Claude
ClaudeでPHPリファクタリングの失敗を減らす方法!実務で使うコードに近づけるための設計相談
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作
No.2
Java&Spring記事人気No2
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonでヒートマップを作成する方法を完全解説!初心者でもわかるデータ分析入門
No.4
Java&Spring記事人気No4
Claude
ClaudeでPythonデバッグを本番目線で確認する方法!本番環境のエラーを慌てず切り分ける考え方
No.5
Java&Spring記事人気No5
Python
Pythonのエラーハンドリング設計を完全ガイド!初心者でもわかる適切な例外をキャッチする方法
No.6
Java&Spring記事人気No6
Python
Pythonで2次元リストを作成・操作する方法(リストのリスト)
No.7
Java&Spring記事人気No7
Python
Pythonのインデントの重要性!なぜPythonではインデントが必須なのか?
No.8
Java&Spring記事人気No8
Python
Pythonの数値型を完全ガイド!整数と浮動小数点数の違いを初心者向けに解説