首页 > 收拾好你的东西 > Perl Class

Perl Class

2010年10月17日 admin 发表评论 阅读评论


Perl Class

在介绍perl面向对象概念(perl Class)之前,让我们先来理解引用(References)、匿名数组和哈希。

引用(References)

  • 顾名思义,就是引用或指向其它对象。
  • 分两种类型的引用:符号引用和硬引用或绝对引用(Hard Reference)
  • 符号引用又称为软引用,只包含他们所指向的名字。例如$foo变量中包含”bar”字符串,那么指向$foo的符号引用就是$bar.
    例子:

    ###符号引用的例子
    my $foo = "bar";
    $$foo = "为动态变量\$bar赋值";
    print "\$bar=$bar";
    ###输出---$bar=为动态变量$bar赋值-----
  • 硬引用是指向包含于一个数据结构中的实际数据。
    例子:

    ###硬引用的例子
    my $foo = "bar";
    my $hardRef = $foo;
    print $hardRef;
    ###输出---bar------

创建硬引用

  一元运算符反斜杠\被用于创建指向命名变量或子函数,例如:

$foo = 'Bill';
$fooRef = \$foo;

  变量$fooRef现在就包含一个指向变量$foo的硬引用。你可以对其它变量做同样的事情。

###数组
$array = \@ARGV;
###哈希
$hash = \%ENV;
###输出
$glob = \*STDOUT;

下面的例子是讲怎样创建子函数的硬引用:

sub foo { print "foo" };
$foosub = \&foo;

匿名数组

  创建匿名数组很容易。

#使用中括号而不是括弧来定义匿名数组$array标量变量
$array = [ 'Bill', 'Ben, 'Mary' ];

  该行右侧构成了一个数组,左侧包含了这个数组的引用。事实上你可以使用内嵌数组来创建更为复杂的数据结构。例如:

@arrayarray = ( 1, 2, [1, 2, 3]);

  变量@arrayarray包含三个元素,而且第三个元素是匿名数组的引用。

匿名哈希

  匿名哈希也是很容易创建的。与数组相比,你实际上只需用大括号替代中括号。

$hash = { 'Man' => 'Bill',
          'Woman' => 'Mary,
          'Dog' => 'Ben'
};

解引用(Dereferencing)

  解引用最直接的方法是在指定的数据加前置符号(例如对标量加$,对数组变量加@,对哈希变量加%和对子函数变量加&)

$array = \@ARGV;     # 创建对数组的引用
$hash = \%ENV;       # 对哈希的引用
$glob = \*STDOUT;    # Create reference to typeglob
$foosub = \&foo;     # 对子函数的引用
push (@$array, "From humans");
$$array[0] = 'Hello'
$$hash{'Hello'} = 'World';
&$foosub;
print $glob "Hello World!\n";

对象基本概念

  讲述perl怎样处理对象之前,先介绍类的三个基础概念:对象、类、方法。

  • 对象(perl Object):在Perl中,对象是指向类的。
  • 类(perl Class):在Perl中,类是用于创建和操纵对象的方法的集合。
  • 方法(perl Method):方法定义于集合中是子函数,方法的第一个参数是对象引用或集合名,这个取决于这个方法影响当前对象或者是类。

  Perl提供bless()函数用于返回引用并成为对象。

定义类

  定义一个类非常简单,在Perl中,一个类对应于一个包。为创建类,你必须首先定义一个包。一个包是一个用户自定义变量和子函数自包含单元,同时可以被重用。
  在Perl中为声明名字为Person的类:

package Person;

  作用区域该包内部,或者遇到另外一个关键字”package”。

创建和使用对象

  为创建类实例,我们需要一个对象构造器。这个构造器是包里的一个方法。大多数开发者使用new作为构造器,但是事实上在Perl中可以使用任何一个。

package Person;
sub new
{
    my $class = shift;
    my $self = {
        _firstName => shift,
        _lastName  => shift,
        _ssn       => shift,
    };
    # Print all the values just for clarification.
    print "First Name is $self->{_firstName}\n";
    print "Last Name is $self->{_lastName}\n";
    print "SSN is $self->{_ssn}\n";
    bless $self, $class;
    return $self;
}

  类中的每一个方法都会传类名为第一个参数。因此在上述例子中,类名为”Person”,因此如果输出$class的话,返回的就是”Person”。其它的参数将会是该函数的参数。

$object = new Person( "Mohammad", "Saleem", 23234345);
你感觉这篇文章怎么样?
好你的 (1) 好你妹 (0) 好你妈 (0)
分类: 收拾好你的东西 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.