💡 この記事でわかること
- 関数とは何か、なぜ使うのか
- function を使った関数の定義と呼び出し方
- 引数で値を渡す方法と、return で結果を返す方法
- デフォルト引数・名前付き引数(PHP 8)の使い方
- PHPの関数は外の変数が見えない、というスコープの考え方
1. 関数とは?
関数とは、
👉 いくつかの処理をひとまとめにして、名前をつけたものです。
💡 同じような処理を何度も書く代わりに、関数として1回定義しておけば、名前を書くだけで何度でも呼び出せます。コードの重複が減り、修正も1か所で済むようになります。
これまで使ってきた echo(正確には構文ですが)や count()・strlen()・var_dump() なども、PHPにあらかじめ用意された関数です。この記事では、それを自分で作る方法を見ていきます。
2. 関数の定義と呼び出し(function)
関数を作ることを「定義する」といい、function を使います。作った関数は、名前のうしろに () を付けて「呼び出す」と実行されます。
<?php
function hello() {
echo "こんにちは";
echo "PHPの関数です";
}
hello(); // ← 呼び出し。ここで中の処理が実行されるfunction 関数名() { ... }で定義する- 関数の中身は
{ }の中に書く - 定義しただけでは実行されない。
hello()と呼び出して初めて動く
👉 PHPの基本文法(<?php ?>・echo・変数)についての記事はこちら
3. 引数 — 関数に値を渡す
関数名の () の中に変数名を書くと、呼び出すときに値を渡せます。この受け渡しする値を引数(ひきすう)といいます。
<?php
function greet($name) {
echo "こんにちは、{$name}さん";
}
greet("太郎"); // こんにちは、太郎さん
greet("花子"); // こんにちは、花子さん引数は複数渡すこともできます。その場合はカンマで区切り、書いた順番どおりに対応します。
<?php
function introduce($name, $age) {
echo "{$name}さんは{$age}歳です";
}
introduce("太郎", 20); // 太郎さんは20歳です👉 定義側で受け取る変数を「仮引数」、呼び出し側で実際に渡す値を「実引数」と呼びます。必要な個数を渡していないとエラーになります。
4. 戻り値(return)
return を使うと、関数の処理結果を呼び出し元に返すことができます。返される値を戻り値といいます。
<?php
function add($a, $b) {
return $a + $b;
}
$result = add(3, 5);
echo $result; // 8
echo add(10, 20); // 30(戻り値を直接使うこともできる)👉 return が実行されると、そこで関数は終了します。return のあとに書いた処理は実行されません。
💡 return を書かない関数は null(値がないことを表す特別な値)を返します。echo は画面に表示するだけで、値を返すわけではありません。「表示する」と「返す」は別物なので、混同しないよう注意しましょう。
関数の中では、if文やforeachも自由に使えます。
<?php
function judge($score) {
if ($score >= 60) {
return "合格";
}
return "不合格";
}
echo judge(75); // 合格
echo judge(40); // 不合格💡 引数や戻り値には型を書くこともできます(function add(int $a, int $b): int のような書き方)。PHPの新しいスタイルですが、最初は型なしでも問題ありません。
👉 PHPのif文・for文・while文についての記事はこちら
5. デフォルト引数(省略できる引数)
引数に = で初期値を設定しておくと、呼び出すときにその引数を省略できます。省略された場合は初期値が使われます。
<?php
function greet($name, $greeting = "こんにちは") {
echo "{$greeting}、{$name}さん";
}
greet("太郎"); // こんにちは、太郎さん($greeting は初期値)
greet("花子", "おはよう"); // おはよう、花子さん👉 デフォルト引数は、必ず通常の引数よりあとに書きます。function greet($greeting = "...", $name) のような順番はエラーになります。
6. 名前付き引数(PHP 8)
呼び出すときに 引数名: 値 の形で渡すと、順番を気にせず、どの引数に渡すかを明示できます(PHP 8.0以降で使えます)。
<?php
function profile($name, $age, $city) {
echo "{$name} / {$age}歳 / {$city}";
}
// 順番どおりに渡す(位置引数)
profile("太郎", 20, "東京");
// 名前を指定して渡す(名前付き引数)。順番が違ってもよい
profile(city: "大阪", name: "花子", age: 25);💡 引数が多い関数では、名前付き引数で渡すとコードが読みやすくなります。どの値が何を表すのか、呼び出し側を見ただけで分かるためです。
7. 複数の値を返す(配列で返す)
PHPの return が返せる値は1つだけです。複数の値を返したいときは、配列にまとめて返し、受け取る側で分割代入するのが定番です。
<?php
function minMax($numbers) {
return [min($numbers), max($numbers)];
}
[$low, $high] = minMax([3, 1, 8, 5]);
echo $low; // 1
echo $high; // 8👉 [$low, $high] = ... は、配列の要素を順番に別々の変数へ取り出す書き方(分割代入)です。
8. 変数のスコープ(関数の中と外)
👉 関数の中で作った変数は、その関数の中でしか使えません。この「変数が使える範囲」をスコープといいます。
<?php
function calc() {
$total = 100; // calc の中だけで有効
echo $total;
}
calc(); // 100
echo $total; // 警告! 関数の外からは $total を使えない💡 さらにPHPでは、関数の外で定義した変数を、関数の中からそのまま読むこともできません(Pythonなどとは異なる点です)。次のコードはエラーになります。
<?php
$tax = 1.1;
function price($base) {
return $base * $tax; // エラー: $tax はここでは見えない
}👉 関数に外の値を使わせたいときは、global に頼らず「引数で渡す」「return で返す」のが基本です。そうすることで、関数が何を受け取り何を返すのかが呼び出し側から分かり、バグを減らせます。
<?php
function price($base, $tax) {
return $base * $tax;
}
echo price(1000, 1.1); // 11009. 関数まわりの用語まとめ
| 用語 | 意味 |
|---|---|
| 定義(function) | 関数を作ること |
| 呼び出し | 作った関数を実行すること(関数名()) |
| 引数(ひきすう) | 関数に渡す値 |
| 戻り値 | 関数が return で返す結果。return がなければ null |
| デフォルト引数 | 省略されたときに使われる初期値 |
| 名前付き引数 | 呼び出し時に 引数名: 値 で渡す方法(PHP 8) |
| スコープ | 変数が使える範囲。PHPの関数は外の変数が見えない |
10. まとめ
- function 関数名() { } で定義し、関数名() で呼び出す
- 引数で値を渡し、returnで結果を返す
returnがない関数はnullを返す(「表示」と「返す」は別物)- デフォルト引数で省略可能に、名前付き引数(PHP 8)で分かりやすく渡せる
- PHPの関数は外の変数が見えない(スコープ)。やりとりは引数と
returnで行う
👉 「同じコードを2回書きそうになったら関数にする」と意識するだけで、プログラムがぐっと整理されます。まずは引数1つ・return 1つの小さな関数から作ってみましょう。