PHPでは、オブジェクトが特定のクラスに属しているか、サブクラスのインスタンスに属しているかを判断するための一般的に使用される方法の1つは、IS_A()関数を使用することです。 IS_A()関数は、オブジェクトが指定されたクラスのインスタンスであるかどうか、またはそのクラスから継承されているかどうかを検出できます。ターゲットクラスが抽象クラスであっても、この関数は適切に機能します。
この記事では、is_a()を使用して、オブジェクトが抽象クラスのインスタンスであるかどうかを判断する方法に焦点を当てます。サンプルコードは、実際の使用と注意点を反映します。
IS_A()関数の基本的な構文は次のとおりです。
is_a(object $object, string $class_name, bool $allow_string = false): bool
$オブジェクト:審査されるオブジェクト。
$ class_name :class name(supports string form)。
$ aopt_string :最初のパラメーターをクラス名文字列にすることを許可するかどうか、デフォルトのfalse 。
この関数は、オブジェクトがクラスのインスタンスであるかクラスのサブクラスであるかを示すブール値真またはfalseを返します。
抽象クラス自体はインスタンス化することはできませんが、継承することができます。抽象クラスのコンクリートサブクラスを継承することによって作成されたオブジェクトも、抽象クラスのインスタンスと見なされます。したがって、オブジェクトが抽象クラスのインスタンスであるかどうかを判断することは、実際にオブジェクトが抽象クラスのサブクラスインスタンスであるかどうかを判断することです。
次の例は、is_a()を使用して、オブジェクトが抽象クラスのインスタンスであるかどうかを判断する方法を示しています。
<?php
// 抽象クラスを定義します Animal
abstract class Animal {
abstract public function makeSound();
}
// 抽象クラスの継承 Animal の特定のカテゴリ Dog
class Dog extends Animal {
public function makeSound() {
return "Woof!";
}
}
// 抽象クラスの継承 Animal の特定のカテゴリ Cat
class Cat extends Animal {
public function makeSound() {
return "Meow!";
}
}
$dog = new Dog();
$cat = new Cat();
// 判断 $dog それは本当ですか Animal 抽象クラスの例
if (is_a($dog, 'Animal')) {
echo "Dog はい Animal 抽象クラスの例" . PHP_EOL;
} else {
echo "Dog 不はい Animal 抽象クラスの例" . PHP_EOL;
}
// 判断 $cat それは本当ですか Animal 抽象クラスの例
if (is_a($cat, 'Animal')) {
echo "Cat はい Animal 抽象クラスの例" . PHP_EOL;
} else {
echo "Cat 不はい Animal 抽象クラスの例" . PHP_EOL;
}
// 判断 $dog それは本当ですか Cat クラスの例
if (is_a($dog, 'Cat')) {
echo "Dog はい Cat クラスの例" . PHP_EOL;
} else {
echo "Dog 不はい Cat クラスの例" . PHP_EOL;
}
?>
実行結果:
Dog はい Animal 抽象クラスの例
Cat はい Animal 抽象クラスの例
Dog 不はい Cat クラスの例
クラス名はケースに敏感です
IS_A()のクラス名の判断は、ケース非感受性です。
インターフェイス判断に似ています
IS_A()を使用して、オブジェクトがインターフェイスを実装するかどうかを判断することもできます。
文字列を通過するとき<br> 最初のパラメーターがオブジェクトの代わりにクラス名文字列である場合、3番目のパラメーターをtrueに設定する必要があります。
if (is_a('Dog', 'Animal', true)) {
echo "Dog 类はい Animal のサブクラス" . PHP_EOL;
}
互換性
IS_A()は、 PHP 5.3から始まる3番目のパラメーターをサポートします。
PHPのIS_A()関数を使用して、オブジェクトが抽象クラスのインスタンスであるかどうかを判断することは非常にシンプルで直感的です。抽象クラスの名前を知っている限り、オブジェクトとクラス名を渡して結果を取得します。これは、オブジェクト指向プログラミングにおけるタイプの判断と多型処理に非常に役立ちます。