3

あるものが別のものによって拡張されていることを検出しようとしましたが、うまくいきません..誰かが私を正しい方向に向けることができますか?

class Main
{
}

class Sub extends Main
{
}

class Third
{
}

$check = class_extends('Sub', 'Main'); // should return true
$check = class_extends('Third', 'Main'); // should return false

それで、これは可能ですか?

4

3 に答える 3

10

を探しているかもしれませんis_subclass_of。インスタンスと文字列クラス名でも動作します。これらのクラスがあるとしましょう:

class B {}
class C extends B {}
class A {}

それで

var_dump(is_subclass_of('C', 'B')); // true, C is subclass of B
var_dump(is_subclass_of('C', 'A')); // false C is not subclass of A

または、細い矢印 ( ->) が好きな場合は、リフレクションも使用できます。

$refC = new ReflectionClass('C');
var_dump($refC->isSubclassOf('B')); // true, C is subclass of B
var_dump($refC->isSubclassOf('A')); // false C is not subclass of A
于 2013-10-31T08:13:14.933 に答える
3

はい、これは可能です。私はあなたがどこを探していると思いますinstanceof

$object = new Sub;
var_dump($object instanceof Main);

これは出力されますbool(true)

例 #3 instanceof を使用して object がphp.net 上のクラスのインスタンスではないかどうかを確認すると比較してください。

<?php
class MyClass
{
}

$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
于 2013-10-31T08:12:12.277 に答える