问题:无法访问父对象属性
package Verification;
use Verification::Proid;
sub Proid
{
my $self = shift;
print Dumper($self);
my $result = Verification::Proid->validate($self);
return $result;
}
转储结果
$VAR1 = bless( {
'event_name' => 'validate',
'Verification_Type' => 'Proid',
'Verification_Value' => 'ecmetric',
'xml_request' => bless( do{\(my $o = 148410616)}, 'XML::LibXML::Document' ),
'Verification_Options' => [
{
'2' => 'UNIX'
}
],
'Verification_ID' => '3'
}, 'Verification' );
package Verification::Proid;
our @ISA = qw(Verification);
sub validate
{
my $self = shift;
print Dumper($self);
my $result;
foreach my $validation_type ( @$self->{Verification_Options} )
{
do stuff...
}
}
转储结果
$VAR1 = 'Verification::Proid';
如果子类没有正确地从传递给它的对象获取所有属性,我做错了什么?
谢谢!
答案 0 :(得分:3)
您的调用语法错误。 Verification::Proid->validate($self)
正在类上调用方法,而不是$self
上的方法。
概念是错误的。父类不应该按名称调用子类中的内容;它完全违背了上课的目的。
您的对象属于属于所谓的子类;它被祝福Verification
,而不是Verification::Proid
。如果它实际上是Verification::Proid
的实例,您可以在其上调用$self->validate
,即使是在父类中也是如此。
答案 1 :(得分:0)
感谢指出@hobbs的缺陷,很明显我需要阅读更多有关OO Perl的内容......在我得到更好的处理之前,我通过在Verification中使用Class :: Singleton找到了一个功能性的解决方法。分
<强> Verification.pm 强>
package Verification;
use Verification::Proid;
use Class::Singleton;
#Instantiate the object as a singleton
sub Proid
{
return Verification::Proid->validate();
}
<强> Proid.pm 强>
package Verification::Proid;
our @ISA = qw(Verification);
sub validate
{
my $self = Verification->instance;
print Dumper($self);
foreach my $validation_type ( @{$self->{Verification_Options}} )
{
do stuff...
}
}
自卸车结果是我需要的
$VAR1 = bless( {
'event_name' => 'validate',
'Verification_Type' => 'Proid',
'Verification_Value' => 'ecmetric',
'xml_request' => bless( do{\(my $o = 148410616)}, 'XML::LibXML::Document' ),
'Verification_Options' => [
{
'2' => 'UNIX'
}
],
'Verification_ID' => '3'
}, 'Verification' );