タイトル: 関数の定義と呼び出し方法
SEOタイトル: PHP 関数の定義と呼び出しの完全ガイド(引数・型宣言・無名関数・アロー関数)
| この記事の要点 |
|
基本構文
型宣言(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 バージョン差吸収に使う。