《PHP8上級試験対策》class_exists()でクラス定義の有無を確認する仕組み

  • URLをコピーしました!

はじめに

PHPでは、クラスがすでに定義済みかどうかを確認したい場面があります。
そんなときに使えるのが class_exists() 関数。
この関数は、ユーザー定義クラス・組み込みクラス・未定義クラスを区別できる便利な関数です。
この記事では、class_exists() の基本動作から出力結果の理由まで、図解を交えて丁寧に解説します。

キーワード:class_exists / クラス定義確認 / autoload / PHP組み込みクラス /

目次

📘class_exists()の基本構文

class_exists(string $class, bool $autoload = true): bool
パラメータ説明
$class確認したいクラス名(文字列)
$autoloadtrueの場合、未定義クラスならオートローダーを試みる(デフォルト)。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ユーザー定義クラスtrueclass Hoge {} で定義済み
Dummy未定義クラスfalse定義されていない(autoloadもなし)
stdClass組み込みクラスtruePHPが最初から持っている標準クラス

🧠 補足: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の有無」と「組み込みクラス」もチェックされる!

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次