PHPでは、 IS_A()関数は、オブジェクトが特定のクラスに属するかどうか、または特定のクラスから継承するかどうかを判断するためによく使用されます。簡単に使用するのは簡単ですが、パラメーター、特にクラス名とオブジェクトの渡された場合、混乱が簡単です。この記事では、IS_A()の正しい使用法を詳細に説明して、クラス名とオブジェクトパラメーターを渡す方法を理解するのに役立ちます。
IS_A()関数の関数は、変数が指定されたクラスのインスタンスであるか、クラスのサブクラスのインスタンスであるかを検出することです。その関数プロトタイプは次のとおりです。
bool is_a(object|string $object_or_class, string $class_name, bool $allow_string = false)
パラメーター説明:
$ object_or_class :オブジェクトインスタンスまたはクラス名文字列を渡すことができます( $ allow_stringがtrueの場合)。
$ class_name :ターゲットクラスの名前、文字列形式。
$ aopt_string :デフォルトはfalseで、最初のパラメーターのみがオブジェクトになることが許可されていることを示します。 trueに設定すると、最初のパラメーターはクラス名文字列にもなります。
関数はtrueまたはfalsを返します。
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
if (is_a($dog, 'Animal')) {
echo "はい Animal クラスまたはそのサブクラスのインスタンス";
} else {
echo "不はい Animal クラスの例";
}
出力:
はい Animal クラスまたはそのサブクラスのインスタンス
$犬は犬のクラスのインスタンスであり、犬は動物のサブクラスであるため、真実に戻ります。
これは最も一般的な使用法であり、オブジェクト変数とクラス名の文字列を直接渡すだけです。
is_a($obj, 'SomeClass');
PHP 5.3.0を使用すると、最初のパラメーターをクラス名文字列に渡すことができますが、3番目のパラメーターをtrueに設定する必要があります。
if (is_a('Dog', 'Animal', true)) {
echo "Dog はい Animal クラスまたはサブクラス";
}
出力:
Dog はい Animal クラスまたはサブクラス
これにより、クラスが別のクラスのサブクラスであるかどうか、またはインターフェイスが実装されているかどうかを判断できます。
特定のシナリオのURLに基づいて対応するクラスのインスタンスを判断したい場合は、コードでURLを使用し、ドメイン名をM66.netに置き換える必要があります。例は次のとおりです。
<?php
class Page {}
class HomePage extends Page {}
$url = 'https://m66.net/home';
$pageClass = 'HomePage';
$pageInstance = new HomePage();
if (is_a($pageInstance, $pageClass)) {
echo "現在のインスタンスはに属します $pageClass 親切";
}
echo "<br>";
if (is_a($pageClass, 'Page', true)) {
echo "$pageClass はい Page 親切或其子親切";
}
?>
ここでは、 is_a()を使用して、 $ pageinstanceがホームページクラスのインスタンスであるかどうか、文字列クラス名$ pageclassがページクラスまたはサブクラスであるかどうかを判断します。 3番目のパラメーターは真でなければなりません。
最初のパラメーターは通常、オブジェクトに渡され、2番目のパラメーターはクラス名文字列を通過します。
最初のパラメーターがクラス名文字列に渡す場合、3番目のパラメーターはtrueを渡す必要があります。
IS_A()は、指定されたクラスかサブクラスインスタンスかを決定します。