PHPオブジェクト指向プログラミングでは、オブジェクトが特定のクラスに属しているかどうかを判断するか、オブジェクトのクラスレベルの関係を決定する必要があることがよくあります。 is_a()およびget_class()は、2つの非常に一般的に使用されている関数と組み合わせて、オブジェクトのクラス階層関係を効果的に判断できます。この記事では、これら2つの機能の使用を詳細に紹介し、例を使用してそれらを一緒に使用する方法を示します。
IS_A()関数は、オブジェクトがクラスのインスタンスであるかどうか、またはオブジェクトのクラスがそのクラスから継承するかどうかを確認するために使用されます。その構文は次のとおりです。
bool is_a(object $object, string $class_name, bool $allow_string = false)
$オブジェクト:チェックするオブジェクト。
$ class_name :ターゲットクラス名。
$ aopt_string : trueの場合、最初の引数は、単なるオブジェクトではなく、クラス名文字列であることが許可されます。
IS_A()は、オブジェクトが属するクラスとその親クラスチェーンをチェックします。それらの1つが満たされている限り、それは真実に戻ります。
get_class()関数は、オブジェクトの実際のクラス名を返します。構文は次のとおりです。
string get_class(object $object)
オブジェクトの現在のクラス名のみを返すだけで、親クラスは含まれません。
IS_A()を使用するだけで、オブジェクトが特定のクラスに属しているのか、その親クラスに属しているのかを判断できました。しかし、時々私たちは判断する必要があります:
オブジェクトが特定のクラスであるかどうか(継承は考慮されない)
オブジェクトが特定のクラスのサブクラスであるか、このクラスであるか
相続関係の階層的な違いを決定します
この時点で、 get_class()とis_a()の組み合わせは、さまざまな判断ロジックを柔軟に実装できます。
次のクラス構造があるとします。
class Animal {}
class Dog extends Animal {}
class Poodle extends Dog {}
$poodle = new Poodle();
if (is_a($poodle, 'Dog')) {
echo 'これはですDogまたはDogのサブクラスインスタンス';
}
出力:
これはですDogまたはDogのサブクラスインスタンス
if (get_class($poodle) === 'Dog') {
echo 'これはですDogクラスの例';
} else {
echo 'いいえDogクラスインスタンス';
}
出力:
いいえDogクラスインスタンス
if (is_a($poodle, 'Dog') && get_class($poodle) !== 'Dog') {
echo 'これはですDogのサブクラスインスタンス,但いいえDogクラス自体';
}
出力:
これはですDogのサブクラスインスタンス,但いいえDogクラス自体
一部のビジネスロジックでは、必要になる場合があります。
クラス自体のロジックを実行します
サブクラスの異なるロジックを実行します
IS_A()とget_class()の共同判断を使用して、それを正確に制御できます。
IS_A()は、 3番目のパラメーターをサポートして、文字列クラス名の判断を可能にします。これはより柔軟です。
get_class()はオブジェクトパラメーターのみを受け入れ、文字列を直接渡すことはできません。
クラス名はケースに敏感であり、ケースの一貫性に注意してください。
PHP 5.3.0の後、 IS_A()は文字列を最初のパラメーターとして受け入れ、3番目のパラメーターTrueで使用できます。
is_a()とget_class()の組み合わせにより、PHPでクラス階層関係を柔軟かつ正確に判断できます。
IS_A()は、特定のクラスに属しているのか、そのサブクラスに属しているのかを決定します。
get_class()オブジェクトの特定のクラス名を決定します。
共同使用は、特定のカテゴリを継承カテゴリと区別して、多様なビジネスニーズを満たすことができます。
関連タグ:
get_class