はじめに
PHPでは、クラスがすでに定義済みかどうかを確認したい場面があります。
そんなときに使えるのが class_exists() 関数。
この関数は、ユーザー定義クラス・組み込みクラス・未定義クラスを区別できる便利な関数です。
この記事では、class_exists() の基本動作から出力結果の理由まで、図解を交えて丁寧に解説します。
目次
📘class_exists()の基本構文
class_exists(string $class, bool $autoload = true): bool| パラメータ | 説明 |
|---|---|
$class | 確認したいクラス名(文字列) |
$autoload | trueの場合、未定義クラスならオートローダーを試みる(デフォルト)。falseの場合は試さない。 |
| 戻り値 | 定義済みなら true、未定義なら false を返す。 |
💡実際のコード例
<?php
declare(strict_types=1);
error_reporting(-1);
class Hoge {}
// 1. 定義済みクラス
$r = class_exists('Hoge');
var_dump($r);
// 2. 未定義クラス
$r = class_exists('Dummy');
var_dump($r);
// 3. 組み込みクラス
$r = class_exists('stdClass');
var_dump($r);実行結果
bool(true)
bool(false)
bool(true)🪶結果の理由を分解して理解しよう
| チェック対象 | 種類 | 結果 | 理由 |
|---|---|---|---|
Hoge | ユーザー定義クラス | ✅ true | class Hoge {} で定義済み |
Dummy | 未定義クラス | ❌ false | 定義されていない(autoloadもなし) |
stdClass | 組み込みクラス | ✅ true | PHPが最初から持っている標準クラス |
🧠 補足:autoloadとの関係
class_exists() の第2引数 $autoload はデフォルトで true になっています。
もしオートローダー(spl_autoload_register() で登録した関数)があれば、未定義クラスを読み込もうと試みます。
spl_autoload_register(function($class) {
echo "autoload: {$class}\n";
});
class_exists('AutoClass'); // autoload: AutoClass→ このように、autoload が有効だと自動的に呼び出されます。
🖼 図解:class_exists() の動作フロー
┌──────────────────┐
│ class_exists() │
└───────┬──────────┘
│ クラス名を渡す
▼
┌────────────────────────────┐
│ クラスが定義済み? │
└───────┬────────────────────┘
YES │ │ NO
▼ ▼
trueを返す autoloadを試す($autoload=trueのとき)
│
├─ ロード成功 → true
└─ 失敗 → false🧾 まとめ
class_exists()はクラスが定義済みかどうかを真偽値で返す。$autoloadパラメータにより、自動読み込みを行うかを制御できる。- PHP標準のクラス(例:
stdClass)は常に存在するためtrueを返す。 - 試験では「autoloadの有無」と「組み込みクラス」もチェックされる!
