PHPの関数の作り方と引数・戻り値の基本

phpアイキャッチ PHP

こんにちは、かつコーチです。

前回は連想配列を使って、意味のある名前でデータを管理する方法を解説しました。

今回のテーマは「関数」です。

関数を使えるようになると、同じ処理を何度も書かずに済むようになり、コードが一気に整理されます。

配列と組み合わせて使う場面も多いので、前回までの内容を活かしながら見ていきましょう。

関数とは?

関数の役割

関数とは、決まった処理をひとまとめにして、名前をつけておける仕組みのことです。

同じ処理を何度も書きたくなったとき、コピペで対応するとこうなります。

<?php
$price1 = 1000;
$tax1 = $price1 * 0.1;
echo "税込価格: " . ($price1 + $tax1) . "円\n";

$price2 = 2000;
$tax2 = $price2 * 0.1;
echo "税込価格: " . ($price2 + $tax2) . "円\n";
?>

同じ計算ロジックが何度も登場していて、消費税率が変わったときにすべての箇所を直す必要があり、修正漏れの原因になります。

関数を使うと、この処理を1箇所にまとめられます。

<?php
function calcTaxIncluded($price) {
    $tax = $price * 0.1;
    return $price + $tax;
}

echo "税込価格: " . calcTaxIncluded(1000) . "円\n";
echo "税込価格: " . calcTaxIncluded(2000) . "円\n";
?>

税率が変わっても、calcTaxIncluded 関数の中身を1箇所直すだけで済みます。

なぜ関数が必要なのか

関数を使う目的は大きく2つあります。

1つ目は「同じ処理の重複を減らす」ことです。

2つ目は「処理に意味のある名前をつけて、コードの見通しをよくする」ことです。

calcTaxIncluded($price) という名前がついているだけで、「税込価格を計算している」と一目で分かるようになります。

長いコードの塊よりも、意味のある名前がついた関数の呼び出しの方が、後から読んだときに理解しやすくなります。

関数の基本的な書き方

関数を定義する

関数は function キーワードを使って定義します。

<?php
function 関数名(引数) {
    // 処理内容
    return 戻り値;
}
?>

引数や戻り値がない、最もシンプルな関数から見てみましょう。

<?php
function sayHello() {
    echo "こんにちは!";
}

sayHello(); // こんにちは!
?>

引数を受け取る

引数(ひきすう)とは、関数を呼び出すときに渡す値のことです。

<?php
function sayHelloTo($name) {
    echo "こんにちは、" . $name . "さん!\n";
}

sayHelloTo("かつコーチ"); // こんにちは、かつコーチさん!
sayHelloTo("佐藤");       // こんにちは、佐藤さん!
?>

$name の部分を「仮引数」、呼び出すときに渡す "かつコーチ" などの実際の値を「実引数」と呼びます。

引数はカンマ区切りで複数受け取ることもできます。

<?php
function introduce($name, $age) {
    echo $name . "さん(" . $age . "歳)です。\n";
}

introduce("かつコーチ", 30); // かつコーチさん(30歳)です。
?>

戻り値を返す

戻り値(もどりち)とは、関数の処理結果として呼び出し元に返す値のことです。

return キーワードを使って値を返します。

<?php
function add($a, $b) {
    return $a + $b;
}

$result = add(3, 5);
echo $result; // 8
?>

echo で直接表示するのではなく return で値を返すことで、その結果を変数に入れたり、別の処理で再利用したりできます。

return が実行された時点で、関数の処理はそこで終了する点も覚えておきましょう。

<?php
function checkAge($age) {
    if ($age < 0) {
        return "不正な値です"; // ここで処理が終わる
    }
    return $age . "歳です";
}

echo checkAge(-5); // 不正な値です
echo checkAge(20); // 20歳です
?>

配列を引数として受け取る

前回・前々回で学んだ配列は、関数の引数としてもそのまま渡せます。

<?php
function totalPrice($prices) {
    $total = 0;
    foreach ($prices as $price) {
        $total += $price;
    }
    return $total;
}

$cartPrices = [1200, 3000, 500];
echo "合計金額: " . totalPrice($cartPrices) . "円";
// 出力: 合計金額: 4700円
?>

連想配列を渡すこともできます。

<?php
function formatUser($user) {
    return $user["name"] . "さん(" . $user["age"] . "歳)";
}

$user = ["name" => "かつコーチ", "age" => 30];
echo formatUser($user); // かつコーチさん(30歳)
?>

「配列をまとめて関数に渡し、関数の中でループや加工をして、結果を返す」という組み合わせは、実務で最も頻繁に登場するパターンのひとつです。

よくあるつまずきポイント・エラー対処

引数の数が合わずエラーになる

私が実際に何度もやってしまった失敗が、関数を定義したときの引数の数と、呼び出すときに渡す値の数を合わせ忘れるミスです。

❌ Before:必須の引数を渡し忘れる

<?php
function introduce($name, $age) {
    echo $name . "さん(" . $age . "歳)です。\n";
}

introduce("かつコーチ"); // $age を渡し忘れている
?>

これを実行すると、次のようなエラーが出ます。

Fatal error: Uncaught ArgumentCountError: Too few arguments to function introduce(), 1 passed and exactly 2 expected

私は最初、このエラーメッセージの「1 passed and exactly 2 expected(1個渡したが、正確に2個必要)」という部分の意味がすぐには分からず、しばらく関数定義自体を読み直していました。

原因を突き止めてみると、単純に呼び出し側で引数を1つ渡し忘れていただけでした。

✅ After:デフォルト値を設定するか、渡す引数の数を確認する

<?php
function introduce($name, $age = null) {
    if ($age === null) {
        echo $name . "さんです。\n";
    } else {
        echo $name . "さん(" . $age . "歳)です。\n";
    }
}

introduce("かつコーチ"); // かつコーチさんです。
introduce("佐藤", 25);    // 佐藤さん(25歳)です。
?>

「引数が省略される可能性がある」場合は、デフォルト値を設定しておくとエラーを防げます。

デフォルト引数の詳しい使い方は、次回の記事で詳しく解説します。

return と echo を混同する

初心者のうちに混同しやすいのが、returnecho の違いです。

<?php
function add($a, $b) {
    echo $a + $b; // 画面に表示するだけで、値を返していない
}

$result = add(3, 5);
echo $result; // 何も表示されない(returnしていないためnullが返る)
?>

echo は画面に文字を表示するだけの命令で、関数の外にその値を渡すことはできません。

$result に計算結果を入れたい場合は、必ず return を使う必要があります。

<?php
function add($a, $b) {
    return $a + $b; // 値を呼び出し元に返す
}

$result = add(3, 5);
echo $result; // 8
?>

「表示したいのか、値として使い回したいのか」を意識して echoreturn を使い分けましょう。

応用・一歩先の使い方

戻り値の型を明示する

PHPでは、引数や戻り値に「型」を指定することもできます。

<?php
function calcTaxIncluded(int $price): int {
    $tax = (int)($price * 0.1);
    return $price + $tax;
}

echo calcTaxIncluded(1000); // 1100
?>

int $price は「引数は整数を受け取る」、: int は「戻り値は整数を返す」という意味です。

型を明示しておくと、意図しない型の値が渡されたときにエラーとして検知しやすくなり、バグの早期発見につながります。

チーム開発では、こうした型宣言があるだけでコードの読みやすさが大きく変わってきます。

まとめ

この記事のポイント

  • 関数は処理をひとまとめにして名前をつける仕組みで、コードの重複を減らせる
  • 引数は関数に渡す値、戻り値return で返す処理結果
  • echo は画面表示のみ、return は値を呼び出し元に返す(役割が異なる)
  • 引数の数が合わないと ArgumentCountError になるため、省略される可能性がある引数にはデフォルト値を検討する
  • 配列を関数に渡してループ処理する組み合わせは実務で頻出のパターン

次に読むべき記事

関数の基本が分かったら、次は引数をより柔軟に扱える「デフォルト引数」「可変長引数」を学んでいきましょう。

→ 次の記事:PHPのデフォルト引数・可変長引数(…)の使い方

タイトルとURLをコピーしました