Perl使用在';新';
如果在Perl模块中,我有一个“new”函数声明:Perl使用在';新';,perl,variables,Perl,Variables,如果在Perl模块中,我有一个“new”函数声明: my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml); $self->{mStrRunType} = $pArgsProcessor->readQueryString('runType'); $self->{mStrStartDate} = $pArgsProcessor->readQueryString('sta
my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
$self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
$self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
$self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');
bless $self, $class;
return $self;
有没有办法在另一个函数中使用存储在“$self”中的数据?我试图使用'mStrRunType'
$self
可能是一个对象,并且包中的所有sub都可以作为方法调用。然后:
my $object = Your::Class->new(...);
$object->foo(42);
在foo
方法中,对象将是第一个参数:
sub foo {
my ($self, $meaning_of_life) = @_;
say "mStrEndDate = $self->{mStrEndDate}";
...;
}
注:
- 通常不应在构造函数中重新定义
。如果超类是为了支持继承而编写的,那么$self
确保引用被放入正确的$class->SUPER::new(…)
中$class
- 您的命名方案表明您可能希望使用更复杂的数据结构:
$self->{mStr} = { RunType => ..., StartDate => ..., EndDate => ..., };
$self
可能是一个对象,包中的所有sub都可以作为方法调用。然后:
my $object = Your::Class->new(...);
$object->foo(42);
在foo
方法中,对象将是第一个参数:
sub foo {
my ($self, $meaning_of_life) = @_;
say "mStrEndDate = $self->{mStrEndDate}";
...;
}
注:
- 通常不应在构造函数中重新定义
。如果超类是为了支持继承而编写的,那么$self
确保引用被放入正确的$class->SUPER::new(…)
中$class
- 您的命名方案表明您可能希望使用更复杂的数据结构:
$self->{mStr} = { RunType => ..., StartDate => ..., EndDate => ..., };
sub new {
my $class = shift;
my $pArgsProcessor, $pResponse, kStrFormatHtml; #shift your constructor params..
my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
$self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
$self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
$self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');
bless $self, $class;
return $self;
}
然后,您的方法应该能够使用您的参数:
sub test {
my $self = shift;
if (defined $self->{mStrEndDate}) {
print $self->{mStrEndDate};
} else {
print "not defined?";
}
}
如果您的键仍然未定义,请确保$pArgsProcessor方法返回定义的值。您的构造函数看起来是正确的。假设您的构造函数与此类似:
sub new {
my $class = shift;
my $pArgsProcessor, $pResponse, kStrFormatHtml; #shift your constructor params..
my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
$self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
$self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
$self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');
bless $self, $class;
return $self;
}
然后,您的方法应该能够使用您的参数:
sub test {
my $self = shift;
if (defined $self->{mStrEndDate}) {
print $self->{mStrEndDate};
} else {
print "not defined?";
}
}
如果您的键仍然未定义,那么请确保$pArgsProcessor方法返回定义的值。+1,尽管我认为命名方案可能只是从另一种编程语言/约定中保留了很重的重音:“m”表示成员(而不是类)变量,“Str”表示字符串变量。+1,尽管我认为命名方案可能只是从另一种编程语言/约定中保留了一个很重的重音:“m”表示成员(而不是类)变量,“Str”表示字符串变量代码>不应该是必需的。超类应该已经正确地祝福了它。
祝福$self,$class代码>不应该是必需的。超类应该已经正确地祝福了它。