Perl 构造函数和析构函数

Perl 构造函数和析构函数

构造函数 **在Perl子程序中的构造函数会返回一个对象,它是该类的一个实例。在Perl中,惯例是将构造函数命名为 **”new “。与其他许多 OOPs 不同,Perl没有为构造一个对象提供任何特殊的语法。它使用与该类明确相关的数据结构(哈希、数组、标量)。

构造函数在哈希引用和类名(包的名称)上使用 “祝福 “函数。

让我们设计一些代码来进行更好的解释:

注意: 由于使用了包,下面的代码将不能在Online IDE上运行。下面的代码是一个Perl类或模块文件。将下面的文件保存为(*.pm)扩展名。

# Declaring the Package
package Area; 
  
# Declaring the Constructor method
sub new 
{
    return bless {}, shift; # blessing on the hashed 
                            # reference (which is empty).
}
  
1;

当构造函数方法被调用时,包名’Area’被存储在默认数组 “@_ “中。关键字 “shift “用于从 “@_ “中获取包的名称,并将其传递给 “bless “函数。

package Area;
  
sub new
{
    my class = shift; # defining shift inmyclass
    my self = {}; # the hashed reference
    return blessself, $class;
}
1;

Note : “my “限制了一个变量的范围。

在Perl中,属性是以散列引用中的键、值对的形式存储的。进一步说,在代码中加入一些属性。

package Area;
  
sub new 
{
    my class = shift;
    myself = 
    {
        length => 2, # storing length
        width  => 3, # storing width 
    };
    return bless self,class;
}
1;

上面的代码( 区域 类)有两个属性: 长度宽度。 为了获得对这些属性的访问,设计了另一个Perl程序来使用它们。

use strict;
use warnings;
use Area;
use feature qw/say/;
  
# creating a new Area object
my area = Area->new;
  
sayarea->{length}; #print the length
say $area->{width}; # print the width

运行代码的步骤

  1. 将带有Package Area的程序保存在一个名为 Area.pm 的文本文件中
    注意: 文件的名称应始终与包的名称相同。

  2. 现在,用*.pl的名字保存用于访问包中定义的属性的程序。这里,*可以是任何名字(在本例中是test.pl)。

  3. 在Perl命令行中使用

    perl test. pl命令来运行保存为test.pl的代码。

输出:

Perl 构造函数和析构函数

传递动态属性 :

用动态属性更新现有文件。

Areas.pm

package Area;
  
sub new 
{
    my (class,args) = @_; # since the values will be 
                             # passed dynamically
    my self = 
    {
        length =>args->{length} || 1, # by default the value is 1 (stored)
        width  => args->{width} || 1,  # by default the value is 1 (stored)
    };
    return blessself, class;
}
  
# we have added the get_area function to
# calculate the area as well
sub get_area 
{
    myself = shift;
      
    # getting the area by multiplication
    my area =self->{length} * self->{width}; 
    returnarea;
}
1;

test.pl

use strict;
use warnings;
use feature qw/say/;
use Area;
  
# pass length and width arguments 
# to the constructor
my area = Area->new(
            {
                length => 2, # passing '2' as param of length
                width => 2, # passing '2' as param of width
            });
  
sayarea->get_area;

现在,Params

length = 2, width = 2

被传递给包Area,以计算正方形的面积。

当任何子程序被调用时,参数都包含在默认的数组变量 @_ 中。

注意: 现在按照上面解释的方式运行代码。

输出:

Perl 构造函数和析构函数

解构器

当一个对象的所有引用超出范围时,Perl会自动调用析构器方法。如果该类创建的线程或临时文件在对象被销毁时需要清理,那么析构器方法就有用处了。Perl包含了一个特殊的方法名,即 ‘DESTROY ‘,用于销毁器,必须在销毁器声明时使用。

语法

sub DESTROY 
{ 
    # DEFINE Destructors
    my $self = shift;
    print "Constructor Destroyed :P"; 
}
Once this snippet is added to existing file **Area.pm**.

输出将有点像这样:

Perl 构造函数和析构函数

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程