PHPの関数(function)は、特定の処理をひとまとめにして名前を付け、何度でも呼び出せるようにする仕組みです。同じ処理を繰り返し書く必要がなくなるため、コードの再利用性が大幅に向上します。プログラムを整理・構造化するうえで最も基本的かつ重要な機能のひとつです。
関数を使うことで、処理の見通しがよくなり、バグの発見や修正も容易になります。ここでは関数の定義方法、引数の受け渡し、戻り値の返し方を基礎からしっかり解説します。
基本的な使い方
関数は function キーワードで定義します。丸括弧 () の中に仮引数(パラメータ)を指定し、波括弧 {} の中に処理を記述します。
function 関数名(仮引数1, 仮引数2, ...) {
// 処理
return 戻り値;
}
return 文を使うと、関数の処理結果を呼び出し元に返すことができます。return が実行された時点で関数の処理は終了し、それ以降のコードは実行されません。
<?php
$test1 = 1;
$test2 = 2;
function test_func($val1, $val2) {
$val3 = $val1 + $val2;
return $val3;
}
$return_val = test_func($test1, $test2);
echo $return_val;
3
上の例では、test_func という名前の関数を定義しています。呼び出し時に $test1(値は1)と $test2(値は2)を渡すと、関数内ではそれぞれ $val1 と $val2 として受け取られます。2つを足した結果 3 が return で返され、変数 $return_val に格納されます。
引数なしの関数
引数を取らない関数も定義できます。固定のメッセージを出力する場合や、決まった処理を実行するだけの場合に便利です。
<?php
function sayHello() {
echo "こんにちは!\n";
}
sayHello();
sayHello();
sayHello();
こんにちは!
こんにちは!
こんにちは!
引数がない場合でも、関数名の後の丸括弧 () は省略できません。定義時も呼び出し時も必ず付けてください。
戻り値のない関数
すべての関数に return が必要というわけではありません。画面への出力やファイルへの書き込みなど、値を返す必要がない処理では return を省略できます。
<?php
function printLine($text) {
echo "--- " . $text . " ---\n";
}
printLine("開始");
printLine("終了");
--- 開始 ---
--- 終了 ---
return を省略した関数の戻り値は null になります。この場合、戻り値を変数に代入しても null が入るだけなので、通常は呼び出すだけで使います。
実用的な例
実際の開発では、計算処理や文字列の整形など、繰り返し使う処理を関数にまとめます。
<?php
// 消費税込みの価格を計算する関数
function calcTaxIncluded($price, $taxRate) {
return $price * (1 + $taxRate);
}
echo calcTaxIncluded(1000, 0.10) . "\n";
echo calcTaxIncluded(500, 0.08) . "\n";
// BMIを計算する関数
function calcBMI($weight, $height) {
return round($weight / ($height ** 2), 1);
}
echo "BMI: " . calcBMI(70, 1.75) . "\n";
echo "BMI: " . calcBMI(55, 1.60) . "\n";
1100
540
BMI: 22.9
BMI: 21.5
このように関数名を見ただけで処理内容が推測できる命名をすることで、コードの可読性が大幅に向上します。関数は「一つの関数に一つの責務」を意識して設計するのが良い習慣です。
関数名には動詞から始まる名前(calc、get、print、is など)を付けると、何をする関数なのかが明確になります。PHPの関数名は大文字・小文字を区別しませんが、慣例として camelCase または snake_case で統一するのが一般的です。
同じ名前の関数を2回定義するとエラーになります。また、関数内で定義した変数は関数の外からはアクセスできません(ローカルスコープ)。関数外の変数を使いたい場合は、引数として渡すか global キーワードを使用します。
まとめ
functionキーワードで関数を定義し、名前を付けて処理をまとめる- 仮引数で値を受け取り、
returnで結果を返す - 引数なし・戻り値なしの関数も作成できる
- 関数名は処理内容がわかる命名にすることで可読性が向上する
- 関数内の変数はローカルスコープで、外部からはアクセスできない