PHPの関数について基本から応用まで詳しく解説します。組み込み関数、ユーザー定義関数、匿名関数の種類や使い方、引数のデフォルト値設定、戻り値の型指定、変数スコープ(ローカル・グローバル・スーパーグローバル)をわかりやすく紹介。PHP初心者から中級者まで役立つベストプラクティスも解説しています。
PHPの関数とは?基本の役割と特徴を解説
PHPの関数は「特定の処理を名前付きでまとめたもの」です。これにより、次のような利点があります。
- コードの再利用
同じ処理を繰り返し使いたい場合、関数を作っておけば、一度書くだけで何度でも呼び出せます。たとえば、メール送信処理や計算処理を関数にしておけば、コードの重複を防げます。 - 処理の見通しがよくなる
長いプログラムをいくつかの関数に分けると、全体像がつかみやすくなり、理解や保守が楽になります。 - デバッグがしやすい
関数ごとに処理を分けておくと、問題が起きた時にどの関数が原因か特定しやすくなります。
また、PHPの関数は「組み込み関数」「ユーザー定義関数」「匿名関数(無名関数)」の3種類に分かれます。
1. 組み込み関数(ビルトイン関数)
PHPがあらかじめ用意している関数です。
例:strlen()
(文字列の長さを取得する)、array_push()
(配列に要素を追加する)など。
特徴
- PHPの標準機能としてすぐに使える
- 数百〜数千の関数が用意されている
- 高速で安定している
2. ユーザー定義関数
開発者が自分で作成する関数です。
コードの再利用や処理のまとめに使います。
書き方の例
function greet($name) {
return "こんにちは、" . $name . "さん!";
}
echo greet("太郎"); // こんにちは、太郎さん!
特徴
- 任意の処理をまとめられる
- 引数や戻り値を自由に設定可能
- 大規模なコードで可読性や保守性を向上させる
3. 匿名関数(無名関数)
名前を持たずに、その場で定義して変数に代入したり、コールバック関数として使う関数です。
書き方の例
$sayHello = function($name) {
return "Hello, " . $name;
};
echo $sayHello("Alice"); // Hello, Alice
特徴
- 名前を持たないため、その場限りの処理やコールバックに便利
- クロージャ(closure)として変数のスコープを取り込むことが可能
- コードがシンプルで柔軟に使える
3種類の関数まとめ
種類 | 説明 | 特徴 |
---|---|---|
組み込み関数 | PHPに標準で備わっている関数 | すぐ使えて高速・安定 |
ユーザー定義関数 | 開発者が自分で作る関数 | 再利用や処理のまとめに最適 |
匿名関数 | 名前を持たない関数 | コールバックや一時的処理に便利、柔軟性高い |
PHPで関数(ユーザー定義関数)を作る方法:基本構文と書き方
関数を作る際のポイントをさらに詳しく解説します。
function 関数名(引数1, 引数2, ...) {
// ここに処理を書く
}
- 関数名の命名規則
関数名は英数字とアンダースコア(_)を使い、小文字で始めるのが一般的です。大文字・小文字は区別されませんが、一貫性を持つことが望ましいです。
例:calculateSum
,get_user_name
- 引数は複数指定可能
引数はコンマ区切りで複数指定できます。引数が無くても関数は作れます。 - 呼び出し方
作った関数は「関数名()」の形で呼び出します。引数があれば、呼び出す時に値を渡します。
シンプルな関数の例
function sayHello() {
echo "こんにちは!";
}
sayHello(); // 「こんにちは!」と表示
引数の初期値を指定する方法:デフォルト値の使い方を理解しよう
デフォルト値は、引数が渡されなかった場合の「保険」として役立ちます。特にオプション的な引数を扱うときに便利です。
デフォルト値の指定ルール
デフォルト値がある引数は、関数定義の中で後ろの方に配置しなければなりません。先にデフォルト値のない引数を書く必要があります。
function profile($name, $age = 20) {
echo "名前: $name, 年齢: $age";
}
profile("鈴木"); // 年齢は20のデフォルト値が使われる
profile("佐藤", 25); // 年齢は25が使われる
デフォルト値の型
デフォルト値は定数やリテラル(文字列、数値など)でなければなりません。動的に計算した値や変数は指定できません。
よく使われるPHP組み込み関数の紹介と使い方
PHPは約1000以上の組み込み関数がありますが、特に初心者がよく使う基本関数を紹介します。
date()
日付や時間を取得・整形します。
echo date("Y-m-d"); // 例: 2025-06-25
strlen()
文字列の長さを調べます。
echo strlen("Hello"); // 5
strpos($a, $b)
文字列内で特定の文字や文字列が最初に現れる位置を調べます。見つからない場合はfalseを返します。
$pos = strpos("abcdef", "cd");
if ($pos !== false) {
echo "位置は $pos"; // 2 と表示(0から数える)
} else {
echo "見つかりません";
}
array_push($arr, $a)
配列の末尾に要素を追加します。
$arr = [1, 2];
array_push($arr, 3);
print_r($arr); // [1, 2, 3]
array_merge($arr1, $arr2)
2つの配列を結合して新しい配列を作ります。
$a = [1, 2];
$b = [3, 4];
$c = array_merge($a, $b);
print_r($c); // [1, 2, 3, 4]
file_get_contents($filename)
ファイルの中身を文字列として読み込みます。
$content = file_get_contents("sample.txt");
echo $content;
これらの関数はドキュメント(公式マニュアル)を参照して使い方を覚えるとよいでしょう。
引数と戻り値の使い方:関数の入力と出力を理解しよう
関数の戻り値とは?返り値の仕組みと変数への代入方法
関数は、ただ処理を実行するだけでなく、「結果」を返すこともできます。この結果を「戻り値(返り値)」と呼びます。
戻り値を使うことで、関数は「計算する機械」や「データを変換する機械」として使えます。
1. return
は関数の処理を終わらせる合図
return
は「この値を返して関数を終わりますよ」という命令です。return
の後に書かれた値が、関数の呼び出し元に返されます。
また、return
が実行されると、その関数の処理はそこで終了します。
つまり、return
の後に書かれたコードは実行されません。
function checkNumber($n) {
if ($n < 0) {
return "負の数"; // ここで処理終了、文字列を返す
}
return "0以上の数"; // $nが0以上ならこちらが返される
// この行の後のコードは実行されません
}
echo checkNumber(-1); // 「負の数」と表示される
echo checkNumber(5); // 「0以上の数」と表示される
2. 戻り値は変数に代入して使える
戻り値はそのまま画面に表示するだけでなく、変数に代入して他の処理に使うこともできます。
function add($a, $b) {
return $a + $b; // 足し算の結果を返す
}
$result = add(3, 7); // 戻り値を$resultに代入
echo $result; // 10 と表示される
3. 戻り値の型を決めることもできる(PHP7以降)
PHP7からは、関数が返す値の「型」をあらかじめ決められます。
例えば、「必ず整数を返す」関数は次のように書きます。
function addInt(int $a, int $b): int {
return $a + $b; // 結果は整数(int)として返す
}
このように型を指定すると、誤って違う型の値を返してしまうミスを防げます。
4. 戻り値を返さない関数はvoid
型を使う(PHP7.1以降)
値を返さない関数は「戻り値がない」ことを明示的に示すために、void
型を指定することができます。
function sayHi(): void {
echo "Hi!"; // 画面に挨拶を表示するだけで、戻り値は返さない
}
void
関数は、return
を使って値を返してはいけません。
(return;
だけなら使えますが、値を返すのは禁止です)
PHPの変数スコープとは?ローカル変数とグローバル変数の違い
ローカル変数とは、関数の中で作られてその関数の中だけで使える変数です。関数が終わると消えてしまいます。
グローバル変数とは、関数の外で作られた変数で、プログラム全体で使えます。ただし、関数の中で使うときは特別な指定が必要です。
1. ローカル変数は関数の中だけで使える
関数の中で作った変数は「ローカル変数」と呼ばれます。
この変数は、その関数の中だけで使えて、関数が終わると消えてしまいます。
function myFunction() {
$localVar = "これはローカル変数";
echo $localVar; // ここでは使える
}
myFunction();
// echo $localVar; // ここはエラーになる(関数の外だから使えない)
つまり、関数の外からはローカル変数を見ることも変更することもできません。
2. グローバル変数はプログラム全体で使える
関数の外で作った変数は「グローバル変数」と呼ばれ、通常はプログラムのどこからでも使えます。
ただし、関数の中から直接グローバル変数を使うことはできません。
関数の中でグローバル変数を使いたい場合は、特別な方法を使います。
3. 関数内でグローバル変数を使うにはglobal
キーワードを使う
関数の中で、外のグローバル変数を使うときは、global
キーワードで「これはグローバル変数だよ」と伝えます。
$globalVar = "グローバル変数";
function useGlobal() {
global $globalVar; // これで関数内でも$globalVarが使える
echo $globalVar;
}
useGlobal(); // 「グローバル変数」と表示される
global
を使わないと、関数の中は別の「ローカルな世界」になり、グローバル変数は見えません。
4. もう一つの方法:$GLOBALS
配列を使う
PHPには$GLOBALS
という特別な配列があり、ここにすべてのグローバル変数が入っています。
関数の中でもこの配列を使えばグローバル変数にアクセスできます。
$var = "テスト";
function test() {
echo $GLOBALS['var']; // ここでグローバル変数$varを使う
}
test(); // 「テスト」と表示される
$GLOBALS
配列はキーに変数名の文字列を指定してアクセスします。
スーパーグローバル変数とは?使い方と注意点
PHPには「スーパーグローバル変数」と呼ばれる特別な変数がいくつかあります。
これらはPHPが自動的に用意していて、どこからでもアクセスできる便利な配列です。
スーパーグローバル変数は主に、ウェブから送られてくる情報(HTTPリクエスト)や、サーバーの環境情報を扱うために使います。
主なスーパーグローバル変数と用途・具体例
変数名 | 用途 | 具体例コード |
---|---|---|
$_GET | URLのクエリパラメータを取得する | echo $_GET['id']; ↓ URL?id=123 の場合、123が表示される |
$_POST | フォームなどのPOSTデータを取得する | echo $_POST['username']; ↓ フォームから送信されたユーザー名 を表示 |
$_SESSION | ユーザーのセッション情報を扱う | session_start(); $_SESSION['user'] = 'tanaka'; echo $_SESSION['user']; // tanaka |
$_COOKIE | ブラウザのクッキー情報を扱う | echo $_COOKIE['site_lang']; ↓ クッキーsite_langの値 |
$_SERVER | サーバーや実行環境の情報を取得する | echo $_SERVER['HTTP_USER_AGENT']; ↓ ユーザーのブラウザ情報 |
使うときの注意点
これらの変数には、ユーザーや外部からの入力が直接入るため、必ず安全に扱うことが大切です。
不正な値が入っていると、セキュリティの問題や予期せぬ動作を引き起こすことがあります。
- 入力値は必ず「バリデーション(正しいかチェック)」をする
- 不要な記号を取り除く「サニタイズ」を行う
たとえば、$_GET['id']
を使うときは、数値かどうかチェックしたり、HTMLタグが入っていないか確認したりしましょう。
if (isset($_GET['id']) && ctype_digit($_GET['id'])) {
$id = (int)$_GET['id'];
echo "IDは {$id} です。";
} else {
echo "不正なIDです。";
}
PHP関数のベストプラクティスと効率的な活用方法
- コメントを書く習慣
他人も自分も理解しやすいよう、関数の役割や引数の意味、戻り値の型・内容をコメントで書きましょう。 - DRY原則の徹底
「Don’t Repeat Yourself」の意味で、重複コードを関数にまとめてメンテナンスしやすくします。 - 関数のテストを行う
小さい関数は単体テストを書きやすいので、バグを早期発見しやすいです。 - エラーハンドリングを考慮する
関数の中で想定外の入力があった場合にどうするか、例外を投げるか、falseやnullを返すかを決めておくと良いです。 - 名前空間(namespace)を活用
大規模なプロジェクトでは、関数名の衝突を防ぐために名前空間を利用しましょう。
namespace MyProject\Utils;
function add($a, $b) {
return $a + $b;
}