この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: 関数の定義と呼び出し方法
SEOタイトル: PHP 関数の定義と呼び出しの完全ガイド(引数・型宣言・無名関数・アロー関数)

この記事の要点
  • 基本: function name($args) { return ...; } で定義、name($args) で呼び出し
  • 型宣言: 引数・戻り値に int / string / ?Type / Union int|string を付ける(PHP 7+ / 8+)
  • デフォルト引数 $x = 0可変長引数 (Variadic) ...$args名前付き引数 name: "val"(PHP 8+)
  • 無名関数 function () use ($x) {}アロー関数 fn($x) => $x * 2(PHP 7.4+)
  • First-class Callable Syntax: strtoupper(...) で関数を Closure 化(PHP 8.1+)

基本構文

型宣言(PHP 7+)

デフォルト引数

 false, 'env' => 'prod']) {
    // ...
}

// オブジェクトをデフォルトには NG (定数式のみ可)
// function f($x = new Date()) {}   // ❌ PHP 8.0 以前
// PHP 8.1+ では new 式が許可される
function f($x = new \DateTime()): void {}   // ✅ PHP 8.1+

可変長引数 (Variadic) と Spread

名前付き引数 (PHP 8.0+)

無名関数 (Closure) と use

アロー関数 (PHP 7.4+)

fn () => expr という短縮構文。外部変数は自動キャプチャ(値渡し)本体は単一式のみ。

 $x * 2;

// 外部変数を自動キャプチャ (use 不要)
$multiplier = 3;
$multiply = fn ($x) => $x * $multiplier;
echo $multiply(5);            // 15

// コールバックで威力発揮
$prices = [100, 200, 300];
$withTax = array_map(fn ($p) => $p * 1.10, $prices);

// ネストもスッキリ
$matrix = [[1,2,3],[4,5,6]];
$doubled = array_map(
    fn ($row) => array_map(fn ($v) => $v * 2, $row),
    $matrix
);

First-class Callable Syntax (PHP 8.1+)

add(...);
echo $add(2, 3);              // 5

$mul = Calc::mul(...);
echo $mul(2, 3);              // 6

// 従来の書き方 (PHP 8.0 以前)
$upper = Closure::fromCallable('strtoupper');
$add   = Closure::fromCallable([$c, 'add']);

変数関数と callable

 $x * 2, [1, 2, 3]);           // [2, 4, 6]
apply([new Foo(), 'bar'], $items);              // インスタンスメソッド
apply(['Foo', 'bar'], $items);                  // 静的メソッド
apply([Foo::class, 'bar'], $items);             // 同上 (PHP 5.5+)

参照渡し(必要時のみ)

FAQ

Q: 関数とメソッドの違い?
A: グローバル空間で function 宣言したものが関数、クラス内の関数がメソッド。呼び出しは $obj->method() または Class::method()

Q: アロー関数と無名関数、どう使い分ける?
A: 単一式・外部変数を読むだけならアロー関数。複数行や外部変数を書き換えるなら無名関数 + use

Q: 関数の存在チェック
A: function_exists('myFunc') で確認。プラグイン形式の処理や PHP バージョン差吸収に使う。