[英]How can I test if a class instance belongs to one of the parent classes that are on the same level?
说我有这个:
class Bird{}
class PrettyBird extends Bird{}
class UglyBird extends Bird{}
class Duckling extends UglyBird{}
我这样做:
$bird = new Duckling();
要么
$bird = new UglyBird();
假设在我的宇宙中,我感兴趣的只是class是否属于UglyBird
或PrettyBird
。 在上述情况下,我想测试在上述两种情况下$bird
是否都属于UglyBird
(超级)类。
怎么样?
目前我可以通过
if (get_class($bird) === UglyBird::class
or get_class($bird) === Duckling::class)
print "MATCH!";
但这是不切实际的。 例如,如果我创建一个扩展UglyBird
的新类,该UglyBird
? 我将不得不将该类添加到if
语句中。
您可以使用instanceof
运算符进行此检查:
if ($bird instanceof UglyBird) {
print "MATCH!";
}
它适用于UglyBird实例和所有继承的类
检查文档以获取详细信息: http : //php.net/manual/zh/language.operators.type.php
您可以使用函数is_subclass_of :
$bird = new Duckling();
$bird2 = new PrettyBird();
var_dump(is_subclass_of($bird, 'UglyBird')); // True
var_dump(is_subclass_of($bird2, 'UglyBird')); // False
假设您有一个PrettyBird
子类:
class PrettyDuckling extends PrettyBird{}
您想知道PrettyBird的孩子是否是UglyBird的子类:
$bird3 = new PrettyDuckling();
var_dump(is_subclass_of($bird3, 'PrettyBird')); // True
var_dump(is_subclass_of($bird3, 'UglyBird')); // False
请注意,这也适用于父级的父级:
var_dump(is_subclass_of($bird, 'Bird')); // True
var_dump(is_subclass_of($bird2, 'Bird')); // True
var_dump(is_subclass_of($bird3, 'Bird')); // True
您可以使用get_parent_class
函数 :
class Bird{}
class PrettyBird extends Bird{}
class UglyBird extends Bird{}
class Duckling extends UglyBird{}
$bird = new Duckling();
var_dump(get_parent_class($bird));
$bird = new UglyBird();
var_dump(get_parent_class($bird));
输出:
string(8) "UglyBird"
string(4) "Bird"
您可以检查:
if (get_parent_class(new Duckling()) == get_parent_class(new UglyBird())) {
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.