現在の位置: ホーム> 最新記事一覧> is_a()およびget_class()は、クラスレベルを決定するために使用します

is_a()およびget_class()は、クラスレベルを決定するために使用します

M66 2025-05-29

PHPオブジェクト指向プログラミングでは、オブジェクトが特定のクラスに属しているかどうかを判断するか、オブジェクトのクラスレベルの関係を決定する必要があることがよくあります。 is_a()およびget_class()は、2つの非常に一般的に使用されている関数と組み合わせて、オブジェクトのクラス階層関係を効果的に判断できます。この記事では、これら2つの機能の使用を詳細に紹介し、例を使用してそれらを一緒に使用する方法を示します。


1。基本的な紹介

is_a()

IS_A()関数は、オブジェクトがクラスのインスタンスであるかどうか、またはオブジェクトのクラスがそのクラスから継承するかどうかを確認するために使用されます。その構文は次のとおりです。

 bool is_a(object $object, string $class_name, bool $allow_string = false)
  • $オブジェクト:チェックするオブジェクト。

  • $ class_name :ターゲットクラス名。

  • $ aopt_stringtrueの場合、最初の引数は、単なるオブジェクトではなく、クラス名文字列であることが許可されます。

IS_A()は、オブジェクトが属するクラスとその親クラスチェーンをチェックします。それらの1つが満たされている限り、それは真実に戻ります。

get_class()

get_class()関数は、オブジェクトの実際のクラス名を返します。構文は次のとおりです。

 string get_class(object $object)

オブジェクトの現在のクラス名のみを返すだけで、親クラスは含まれません。


2。なぜそれを組み合わせて使用​​するのですか?

IS_A()を使用するだけで、オブジェクトが特定のクラスに属しているのか、その親クラスに属しているのかを判断できました。しかし、時々私たちは判断する必要があります:

  • オブジェクトが特定のクラスであるかどうか(継承は考慮されない)

  • オブジェクトが特定のクラスのサブクラスであるか、このクラスであるか

  • 相続関係の階層的な違いを決定します

この時点で、 get_class()is_a()の組み合わせは、さまざまな判断ロジックを柔軟に実装できます。


3。サンプルデモンストレーション

次のクラス構造があるとします。

 class Animal {}
class Dog extends Animal {}
class Poodle extends Dog {}

$poodle = new Poodle();

例1:それが特定のクラスかそのサブクラスかを判断する

if (is_a($poodle, 'Dog')) {
    echo 'これはですDogまたはDogのサブクラスインスタンス';
}

出力:

 これはですDogまたはDogのサブクラスインスタンス

例2:指定された特定のクラスであるかどうかを判断します(サブクラスを除く)

 if (get_class($poodle) === 'Dog') {
    echo 'これはですDogクラスの例';
} else {
    echo 'いいえDogクラスインスタンス';
}

出力:

 いいえDogクラスインスタンス

例3:共同使用判断

if (is_a($poodle, 'Dog') && get_class($poodle) !== 'Dog') {
    echo 'これはですDogのサブクラスインスタンス,但いいえDogクラス自体';
}

出力:

 これはですDogのサブクラスインスタンス,但いいえDogクラス自体

4。実際のアプリケーションと組み合わせた

一部のビジネスロジックでは、必要になる場合があります。

  • クラス自体のロジックを実行します

  • サブクラスの異なるロジックを実行します

IS_A()get_class()の共同判断を使用して、それを正確に制御できます。


5。注意すべきこと

  • IS_A()は、 3番目のパラメーターをサポートして、文字列クラス名の判断を可能にします。これはより柔軟です。

  • get_class()はオブジェクトパラメーターのみを受け入れ、文字列を直接渡すことはできません。

  • クラス名はケースに敏感であり、ケースの一貫性に注意してください。

  • PHP 5.3.0の後、 IS_A()は文字列を最初のパラメーターとして受け入れ、3番目のパラメーターTrueで使用できます。


6。概要

is_a()get_class()の組み合わせにより、PHPでクラス階層関係を柔軟かつ正確に判断できます。

  • IS_A()は、特定のクラスに属しているのか、そのサブクラスに属しているのかを決定します。

  • get_class()オブジェクトの特定のクラス名を決定します。

  • 共同使用は、特定のカテゴリを継承カテゴリと区別して、多様なビジネスニーズを満たすことができます。


7。リファレンスリンク