現在の位置: ホーム> 最新記事一覧> is_a()を使用して、オブジェクトが複数のクラスのいずれかに属しているかどうかを判断する方法は?包装方法の詳細な説明

is_a()を使用して、オブジェクトが複数のクラスのいずれかに属しているかどうかを判断する方法は?包装方法の詳細な説明

M66 2025-06-28

1。IS_A()関数の簡単なレビュー

is_a(object $ object、string $ class_name、bool $ awal_string = false):bool

  • $オブジェクトを検出します

  • $ class_nameクラス名文字列

  • オブジェクトがクラスまたはそのサブクラスに属している場合はtrueを返し、それ以外の場合はfalseを返します

例:

 class Animal {}
class Dog extends Animal {}

$dog = new Dog();

var_dump(is_a($dog, 'Dog'));      // true
var_dump(is_a($dog, 'Animal'));   // true,なぜなら Dog 継承 Animal
var_dump(is_a($dog, 'Cat'));      // false

2。マルチカテゴリの判断の要件

オブジェクトが、またはのいずれかに属しているかどうかを判断したいとします。最も一般的な方法は次のとおりです。

 if (is_a($obj, 'Dog') || is_a($obj, 'Cat') || is_a($obj, 'Bird')) {
    // オブジェクトは、これら3つのクラスのいずれかに属します
}

多くの種類の判断がある場合、書くのは不便であり、メンテナンスを助長しません。


3。一般的な関数をカプセル化します

関数をカプセル化し、オブジェクトとクラス名の配列を渡すことができ、関数はオブジェクトがこれらのクラスのいずれかに属しているかどうかを返します。

 function is_a_any($object, array $classNames): bool {
    foreach ($classNames as $className) {
        if (is_a($object, $className)) {
            return true;
        }
    }
    return false;
}

使用例:

 $classes = ['Dog', 'Cat', 'Bird'];

if (is_a_any($obj, $classes)) {
    echo "オブジェクトはクラスの1つに属します";
} else {
    echo "オブジェクトはこれらのクラスに属していません";
}

4.さらなる拡張 - ケースの鈍感なクラス名とインターフェイスの判断をサポートする

PHPのクラス名はケース非感受性ですが、厳密なために、判断するときに均一にケースができます。

 function is_a_any($object, array $classNames): bool {
    foreach ($classNames as $className) {
        if (is_a($object, $className)) {
            return true;
        }
    }
    return false;
}

実際、 IS_A()自体はすでに症例に依存しないため、追加の処理を行う必要はありません。

また、オブジェクトが特定のインターフェイスを実装しているかどうかを判断する場合は、 is_a()も適用されます。


5。例を備えた完全なコードを実証します

<?php

class Dog {}
class Cat {}
class Bird {}

class Bulldog extends Dog {}

function is_a_any($object, array $classNames): bool {
    foreach ($classNames as $className) {
        if (is_a($object, $className)) {
            return true;
        }
    }
    return false;
}

$bulldog = new Bulldog();

$checkClasses = ['Cat', 'Bird', 'Dog'];

if (is_a_any($bulldog, $checkClasses)) {
    echo "オブジェクトは、指定されたクラスの1つに属します";
} else {
    echo "オブジェクトはこれらのクラスに属していません";
}

実行結果:

 オブジェクトは、指定されたクラスの1つに属します

ブルドッグのサブクラスだからです。


6。概要

  • IS_A()は、オブジェクトが特定のクラスに属しているかそのサブクラスに属しているかを検出するために使用されます。

  • 複数のクラスを判断するときは、ループカプセル化関数is_a_any()を使用してクラス名配列に渡します

  • 柔軟で簡潔な機能、メンテナンスと拡張が簡単です

このような機能をカプセル化することにより、コードはよりエレガントで理解しやすく、開発で一般的に使用される実用的な手法です。