PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのis_subclass_of()関数とは?構文・パラメータ・使い方をわかりやすく解説

is_subclass_of()関数とは

PHPのis_subclass_of()関数は、指定したオブジェクトがあるクラスのサブクラス(子クラス)に属しているかどうかをチェックするための関数です。オブジェクト指向プログラミングにおいて、クラス間の継承関係を確認したい場面で活用できます。

構文

is_subclass_of(object, class, string)

パラメータ

  • object − 継承関係を検証する対象となるオブジェクト

  • class − 親クラスとして確認するクラス名

  • string − false を設定すると、文字列として渡されたクラス名は許可されません

戻り値

オブジェクト「object」が「class」で指定したクラスのサブクラスに属する場合は TRUE を、そうでない場合は FALSE を返します。

以下に具体的な使用例を示します。

使用例

<?php
// 親クラスを定義
class wid_fact {
    var $oink = 'moo';
}

// 子クラスを定義
class wid_fact_child extends wid_fact {
    var $oink = 'oink';
}

// 新しいオブジェクトを作成
$WF = new wid_fact();
$WFC = new wid_fact_child();

if (is_subclass_of($WFC, 'wid_fact')) {
    echo "yes, \$WFC is a subclass of wid_fact \n";
} else {
    echo "no, \$WFC is not a subclass of wid_fact \n";
}

if (is_subclass_of($WF, 'wid_fact')) {
    echo "yes, \$WF is a subclass of wid_fact \n";
} else {
    echo "no, \$WF is not a subclass of wid_fact \n";
}
?>

実行結果は以下の通りです。

出力

yes, $WFC is a subclass of wid_fact
no, $WF is not a subclass of wid_fact

ポイント解説

この例では、$WFC(wid_fact_child クラスのインスタンス)は wid_fact クラスを継承しているため TRUE が返されます。一方、$WF(wid_fact クラスそのもののインスタンス)には親クラスが存在しないため FALSE が返されます。

つまり、is_subclass_of() 関数はオブジェクトが特定のクラスそのものであるかどうかではなく、あくまで継承関係(サブクラスであるかどうか)を判定する点に注意が必要です。クラスそのものとの一致も含めて判定したい場合は、instanceof 演算子や is_a() 関数を使用するとよいでしょう。

  1. PHPのget_class_methods()関数とは?使い方をわかりやすく解説

    get_class_methods()関数の概要PHPのget_class_methods()関数は、指定したクラスに定義されているメソッド名の一覧を取得するための関数です。引数に渡されたクラス(name_of_class)に定義されたすべてのメソッド名を配列として返し、エラーが発生した場合はNULLを返します。構文get_class_methods(class)パラメータname_of_class − メソッド名を取得したいクラス名を文字列またはオブジェクトで指定します。必須パラメータです。戻り値get_class_methods()関数は、name_of_c

  2. PHPのclass_exists()関数とは?使い方とサンプルコードをわかりやすく解説

    概要PHPのclass_exists()関数は、指定したクラスがすでに定義されているかどうかをチェックするための関数です。クラスが定義済みであればTRUEを、未定義であればFALSEを返します。プラグインの読み込みや条件分岐によるクラスの動的な利用など、柔軟なプログラミングに役立ちます。構文class_exists(class, autoload)パラメータclass − 存在を確認したいクラスの名前。autoload − デフォルトでオートロード機構(__autoload / spl_autoload_call)を呼び出すかどうか。省略した場合のデフォルト値はTRUE