ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本構文
<?php
// 定義
function greet($name) {
return "Hello, $name!";
}
// 呼び出し
echo greet('World'); // Hello, World!
// 関数名は大文字小文字を区別しない(クラスとの違い)
echo Greet('PHP'); // Hello, PHP! ← 動くが推奨しない
型宣言(PHP 7+)
<?php
// 引数と戻り値に型を付ける
function add(int $a, int $b): int {
return $a + $b;
}
add(1, 2); // 3
add('1', '2'); // 3 (strict_types 無しなら自動変換)
// strict モード (ファイル先頭)
declare(strict_types=1);
function divide(float $a, float $b): float {
return $a / $b;
}
// divide('1', '2'); // TypeError
// Nullable 型 (PHP 7.1+)
function findUser(?int $id): ?User {
if ($id === null) return null;
return User::find($id);
}
// Union 型 (PHP 8.0+)
function format(int|float|string $value): string {
return (string) $value;
}
// Intersection 型 (PHP 8.1+)
function process(Countable&Iterator $obj): void { ... }
デフォルト引数
<?php
// 末尾にデフォルト値を持つ引数を置く
function greet(string $name, string $prefix = 'Hello'): string {
return "$prefix, $name!";
}
greet('Alice'); // Hello, Alice!
greet('Bob', 'Hi'); // Hi, Bob!
// 配列をデフォルトに
function config(array $opts = ['debug' => 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
// ... で可変個の引数を配列として受け取る
function sum(int ...$nums): int {
return array_sum($nums);
}
sum(1, 2, 3); // 6
sum(1, 2, 3, 4, 5); // 15
// 配列展開 (spread) で呼び出し
$args = [1, 2, 3];
sum(...$args); // 6
// 通常引数と組み合わせ
function log_with_tags(string $level, string ...$tags): void {
// $level = 'info', $tags = ['db','slow']
}
log_with_tags('info', 'db', 'slow');
名前付き引数 (PHP 8.0+)
<?php
function createUser(string $name, int $age = 0,
bool $admin = false, ?string $email = null): User {
// ...
}
// 位置引数(従来)
createUser('Alice', 30, false, 'a@example.com');
// 名前付き引数 (PHP 8.0+)
createUser(name: 'Alice', email: 'a@example.com', admin: true);
// → age はデフォルトの 0、順序を気にしなくて良い
// 位置 + 名前 (位置が先)
createUser('Alice', admin: true);
無名関数 (Closure) と use
<?php
// 変数に代入できる
$double = function (int $x): int {
return $x * 2;
};
echo $double(5); // 10
// コールバックとして渡す
$nums = array_map(function ($x) { return $x * 2; }, [1, 2, 3]);
// [2, 4, 6]
// 外部変数を取り込む use
$multiplier = 3;
$multiply = function (int $x) use ($multiplier): int {
return $x * $multiplier;
};
echo $multiply(5); // 15
// 参照キャプチャ
$count = 0;
$inc = function () use (&$count) { $count++; };
$inc(); $inc(); $inc();
echo $count; // 3
アロー関数 (PHP 7.4+)
fn () => expr という短縮構文。外部変数は自動キャプチャ(値渡し)、本体は単一式のみ。
<?php
// 無名関数版
$double = function ($x) { return $x * 2; };
// アロー関数版(短い)
$double = fn ($x) => $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+)
<?php
// 関数を Closure として取り出す
$upper = strtoupper(...);
echo $upper('hello'); // HELLO
// メソッドも同様
class Calc {
public function add(int $a, int $b): int { return $a + $b; }
public static function mul(int $a, int $b): int { return $a * $b; }
}
$c = new Calc();
$add = $c->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
<?php
// 関数名を文字列で渡す
$fn = 'strtoupper';
echo $fn('hello'); // HELLO
// callable 型ヒント
function apply(callable $fn, array $items): array {
return array_map($fn, $items);
}
apply('strtoupper', ['a', 'b', 'c']); // ['A','B','C']
apply(fn ($x) => $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+)
参照渡し(必要時のみ)
<?php
// 引数を & で参照渡し
function increment(int &$x): void {
$x++;
}
$n = 10;
increment($n);
echo $n; // 11
// 配列の要素を直接操作
function normalize(array &$arr): void {
foreach ($arr as &$v) {
$v = strtolower($v);
}
unset($v); // foreach の参照は最後に解除
}
FAQ
Q: 関数とメソッドの違い?
A: グローバル空間で function 宣言したものが関数、クラス内の関数がメソッド。呼び出しは $obj->method() または Class::method()。
Q: アロー関数と無名関数、どう使い分ける?
A: 単一式・外部変数を読むだけならアロー関数。複数行や外部変数を書き換えるなら無名関数 + use。
Q: 関数の存在チェック
A: function_exists('myFunc') で確認。プラグイン形式の処理や PHP バージョン差吸収に使う。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- 関数の定義と呼び出し方法
- 他ファイルの関数読み込み
- 可変長引数
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?