有没有办法检查一个对象是否是一个类的实例?如果一个对象是一个类的实例,如果它已被类祝福:
package Example;
sub new {
$self = {};
bless($self, shift);
return $self;
}
############
use Example;
$exp = Example->new(); # $exp is now an 'instance' of Example
# something like instanceof($exp, Example) would return 1
答案 0 :(得分:5)
Scalar::Util中的blessed()
子例程返回对象所属类的名称。
say blessed $exp; # prints "Example"
对于您的测试,您可以使用以下内容:
if (blessed $exp eq 'Example') { ...}
如果子类化可能是个问题,那么请改用isa()
。
if ($exp->isa('Example')} { ... }
但如果$exp
不是对象,则会引发错误,因此请先调用blessed()
来保护呼叫。
if (blessed($exp) and $exp->isa('Example')) { ... }
isa()
是UNIVERSAL类的一个方法,每个类都是UNIVERSAL的子类,因此每个对象都有isa()
方法。