本文和大家重点讨论一下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的打印方法:
- sub print
- {
- my($self)=@_;
- #print Personinfo
- printf("Name:%s%s\n\n",$self->firstName,$self->lastName);
- }
要调用这个方法,类似PHP,只需要:$khurt->print();
$khurt是一个Person的实例.my($self)=@_;这句意思,是把当前的变量赋给$self这个私有的变量.@_是Perl内置的一个变量,代表当前正在访问的变量,它是一个全局变量。
构造函数
要创建一个Perl类的实例,我们需要一个构造函数.当然,这个构造函数肯定要在相应的package中定义.大多数的Perl程序员把构造函数命
名为new,其实无论这个函数叫什么名字,Perl都能接受.
每个Perl对象的实例说到底都是一个数据类型,或者是数组型,或者是Hash列表型等等.这就象C++中的ADT(AbstractDataType)一样.
Person的构造函数如下,我们用的是一个Hash的引用作为一个类的实例:
- #constructor
- sub new{
- my$self={
- _firstName=>undef,
- _lastName=>undef,
- _ssn=>undef,
- _address=>undef
- };
- bless$self,'Person';
- return$self;
- }
这里,我们在Person包中创建了一个叫new的方法,实际上也就是在Persong类中创建了一个构造函数.这个对象的属性全部都在$self变量中了.bless$self'Person'这句比较重要.bless函数的第一个参数是一个变量的引用,第二参数是一个Perl类名.这个函数的作用是说明$self变量是属于Person类的。
要创建一个Person的实例:
my$khurt=Person->new();
我们还没有创建任何的访问方法和错误检查方法.为了让构造函数更加的可靠和可继承,将构造函数重写:
- sub new{
- my($class)=@_;
- my$self={
- _firstName=>undef,
- _lastName=>undef,
- _ssn=>undef,
- _address=>undef
- };
- bless$self,$class;
- return$self;
- }
其它的面向对象语言有私有变量,保护变量这些概念,控制了变量的访问权限,防止变量被直接改变.Perl没有私有变量,但是还是可以通过访问函数来控制变量的访问权限。