1

问题:无法访问父对象属性

Verification.pm:(父类)

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' );

Proid.pm: (儿童班)

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';

子类没有正确获取传递给它的对象的所有属性,我做错了什么?

谢谢!

4

2 回答 2

3
  1. 你的调用语法是错误的。Verification::Proid->validate($self)正在调用上的方法,而不是$self

  2. 这个概念是错误的。父类不应该通过名称来调用子类中的东西;它完全违背了上课的目的。

  3. 您的对象不属于假定的子类;它被祝福了Verification,不是Verification::Proid。如果它实际上是您的一个实例,即使在父类中Verification::Proid也可以调用它。$self->validate

于 2012-08-31T16:22:30.300 回答
0

感谢您指出缺陷@hobbs,很明显我需要阅读更多关于 OO Perl 的内容......直到我更好地处理它,我通过在 Verification.pm 中使用 Class::Singleton 找到了一个功能解决方法

验证.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' );
于 2012-08-31T21:36:03.870 回答