Perl类概念详解

本文和大家重点讨论一下Perl类的概念,.要做好在Perl下的面向对象编程,你不仅要简单的用LarryWall提出Perl面向对象编程的标准,同时要对Perl类的概念及应用非常熟悉。

Perl类

大多数人其实都没有注意到,Perl也是一种面向对象的编程语言,但它又和传统的面向对象的语言:如C++,Java完全不一样.要做好在Perl下的面向对象编程,你只要简单的用LarryWall提出Perl面向对象编程的标准就可以了。

这里举一个简单的例子:Person类代表一个人,包含一个人的一些简单的信息:名字,社会保障号等。

要创建一个Perl类源码天空,首先我们先要创建一个包--package.一个package是一个自包含的单元,它包含一些用户定义的变量和方法,类似于Java中的Package和C#中的namespace,也起到一个命名空间的作用.不同命名空间下的相同名字的变量,相互之间是不冲突的。

声明一个Perl类:packagePerson;

Person的作用域一直到这个文件的结尾.

在类中定义一个方法:在Person类中定义一个print的打印方法:

  
  
  
  
  1. sub print
  2. {
  3. my($self)=@_;
  4. #print Personinfo
  5. printf("Name:%s%s\n\n",$self->firstName,$self->lastName);
  6. }

要调用这个方法,类似PHP,只需要:$khurt->print();

$khurt是一个Person的实例.my($self)=@_;这句意思,是把当前的变量赋给$self这个私有的变量.@_是Perl内置的一个变量,代表当前正在访问的变量,它是一个全局变量。


构造函数

要创建一个Perl类的实例,我们需要一个构造函数.当然,这个构造函数肯定要在相应的package中定义.大多数的Perl程序员把构造函数命

名为new,其实无论这个函数叫什么名字,Perl都能接受.

每个Perl对象的实例说到底都是一个数据类型,或者是数组型,或者是Hash列表型等等.这就象C++中的ADT(AbstractDataType)一样.

Person的构造函数如下,我们用的是一个Hash的引用作为一个类的实例:

  
  
  
  
  1. #constructor
  2. sub new{
  3. my$self={
  4. _firstName=>undef,
  5. _lastName=>undef,
  6. _ssn=>undef,
  7. _address=>undef
  8. };
  9. bless$self,'Person';
  10. return$self;
  11. }

这里,我们在Person包中创建了一个叫new的方法,实际上也就是在Persong类中创建了一个构造函数.这个对象的属性全部都在$self变量中了.bless$self'Person'这句比较重要.bless函数的第一个参数是一个变量的引用,第二参数是一个Perl类名.这个函数的作用是说明$self变量是属于Person类的。

要创建一个Person的实例:

my$khurt=Person->new();

我们还没有创建任何的访问方法和错误检查方法.为了让构造函数更加的可靠和可继承,将构造函数重写:

  
  
  
  
  1. sub new{
  2. my($class)=@_;
  3. my$self={
  4. _firstName=>undef,
  5. _lastName=>undef,
  6. _ssn=>undef,
  7. _address=>undef
  8. };
  9. bless$self,$class;
  10. return$self;
  11. }

其它的面向对象语言有私有变量,保护变量这些概念,控制了变量的访问权限,防止变量被直接改变.Perl没有私有变量,但是还是可以通过访问函数来控制变量的访问权限。

你可能感兴趣的:(Perl类概念详解)