きっかけ
子クラス、孫クラス、ひ孫クラスと継承していったときに親クラスに属するかを判別したかった。
明示的にその旨が記載しているドキュメントがすぐに見つからなかったのでメモ
is_a()は対象のクラスと同じクラスでもOK、is_subclass_of()はその名の通りNGです
あと、is_a() と is_subclass_of() で第一引数の文字列許容がデフォルトで違うのがちょっと厄介です
PHP: is_a - Manual
http://php.net/manual/ja/function.is-a.php
PHP: is_subclass_of - Manual
http://php.net/manual/ja/function.is-subclass-of.php
ソースと結果
<?php
class A {
}
class B extends A {
}
class C extends B {
}
$a = new A;
$b = new B;
$c = new C;
var_dump(is_a($a, 'A')); // true
var_dump(is_a($b, 'A')); // true
var_dump(is_a($c, 'A')); // true
var_dump(is_a($c, 'B')); // true
var_dump(is_a('B', 'A')); // false
var_dump(is_a('A', 'A')); // false
var_dump(is_a('C', 'A')); // false
var_dump(is_subclass_of($a, 'A')); // false
var_dump(is_subclass_of($b, 'A')); // true
var_dump(is_subclass_of($c, 'A')); // true
var_dump(is_subclass_of($c, 'B')); // true
var_dump(is_subclass_of('A', 'A')); // false
var_dump(is_subclass_of('B', 'A')); // true
var_dump(is_subclass_of('C', 'A')); // true
?>