PHP バージョン7以上では、
メソッドや関数の戻り値(リターン値)の型を明示的に指定
することができます。
これにより、コードの可読性・保守性・バグの予防が向上します。
🧠 PHP 7 以降の戻り値の型の基本構文
phpfunction 関数名(): 型名 {
// 処理
return 戻り値;
}
✅ 主な戻り値の型(スカラ型)
| 型 | 説明 | 使用例 |
|---|---|---|
int | 整数 | function getAge(): int {} |
float | 浮動小数点数(実数) | function getRate(): float {} |
string | 文字列 | function getName(): string {} |
bool | 真偽値(true / false) | function isValid(): bool {} |
🔁 配列やオブジェクト型も使える
配列
phpfunction getList(): array {
return ['apple', 'banana'];
}
クラス型(オブジェクト)
phpclass User {}
function getUser(): User {
return new User();
}
❗ 特殊な戻り値の型
| 型 | 説明 | バージョン |
|---|---|---|
void | 値を返さない | PHP 7.1+ |
iterable | 配列や Traversable オブジェクトを返す | PHP 7.1+ |
?型名 | null も許容する nullable 型 | PHP 7.1+ |
void 例
phpfunction logMessage(string $msg): void {
echo $msg;
}
?型名 例(nullable)
phpfunction findUser(): ?User {
return null; // または User オブジェクト
}
🚨 注意点
- PHP 7 では、戻り値の型が一致しないと
TypeErrorになる。 strict_types=1を宣言すると、型の厳格チェックが有効になります(オプション)。
phpdeclare(strict_types=1);
戻り値の型指定は、コードを堅牢にし、IDE や静的解析でも大きく助けになります。
✅ JSON形式の戻り値の扱い(PHP 7の場合)
JSONそのもの(文字列)を返すなら: string 型
phpfunction getJson(): string {
$data = ['name' => 'Taro', 'age' => 25];
return json_encode($data);
}
このように、json_encode() は JSON文字列を返す関数なので、
戻り値の型は string になります。
🔄 JSONをパース(デコード)して返すなら:array または object
phpfunction getDataArray(): array {
$json = '{"name": "Taro", "age": 25}';
return json_decode($json, true); // 配列で返す
}
function getDataObject(): \stdClass {
$json = '{"name": "Taro", "age": 25}';
return json_decode($json); // オブジェクトで返す(デフォルト)
}
json_decode($json, true)→ 配列で返す →arrayjson_decode($json)→ stdClass オブジェクトで返す →\stdClass
🔍 まとめ
| 目的 | 戻り値の型指定 |
|---|---|
| JSON文字列として返す | string |
| JSONを配列として返す | array |
| JSONをオブジェクトとして返す | \stdClass |
PHP 7以降では、関数やメソッドの戻り値の型を明示的に指定できますが、
**条件によって異なる型を返す(ユニオン型)**場合、
PHP 8.0から導入された「ユニオン型(Union Types)」を使うことができます。
✅ PHP 8.0 以降:ユニオン型の指定方法
複数の型を |(パイプ)でつなげて書きます。
phpfunction getValue(bool $asInt): int | string {
if ($asInt) {
return 100;
} else {
return "100";
}
}
この関数は int か string のいずれかを返す可能性があると宣言しています。
❌ PHP 7.x では?
PHP 7ではユニオン型の構文はサポートされていません。
そのため、複数の型を返す必要がある場合は、戻り値の型指定を省略するか、
PHPDocコメントで型を明示するのが一般的です。
php/**
* @return int|string
*/
function getValue($asInt) {
if ($asInt) {
return 100;
} else {
return "100";
}
}
✅ PHP 8.1 以降(おまけ):never や mixed、nullも型に使える
phpfunction example(): int | null {
return rand(0, 1) ? 42 : null;
}
また、mixed は「任意の型」を意味します
(ただし、なるべく具体的な型を使うのが推奨されます)。

