クラスとオブジェクトのメソッド起動
以下は、クラスとオブジェクトでのメソッド起動のサンプルです。
また、クラス内やオブジェクト内で作成したオブジェクトのメソッドが、オブジェクトを返す時は、そのオブジェクトのメソッドを「->」で繋げることができます(03と04の例)。
プログラムソース(tstobject2.pl)
#!/usr/bin/perl use strict; use DateString::DateStringx; my $yesterday = time() - 60 * 60 * 24; my $date1 = DateString::DateStringx->new($yesterday);# クラスのインスタンス化 print "-------------------------------------------01\n"; print DateString::DateStringx->test2, "\n"; # クラスのメソッド起動 print "-------------------------------------------02\n"; print $date1->test2, "\n"; # オブジェクトのメソッド起動 print "-------------------------------------------03\n"; print DateString::DateStringx->test3->test3, "\n";# クラス内で作成したオブジェクトのメソッド起動 print "-------------------------------------------04\n"; print $date1->test3->test3, "\n"; # オブジェクト内で作成したオブジェクトのメソッド起動
DateStringx.pmモジュールソース(DateStringxクラス)
DateStringx.pm package DateString::DateStringx; use strict; use DateString::DateStringz; my $yesterday = time() - 60 * 60 * 24; my $date1 = DateString::DateStringz->new($yesterday); sub test3 { print "$_[0]---DateStringx---$_[1]", "\n"; return $date1; } sub test2 { return "$_[0]---DateStringx---$_[1]"; } sub new { my $class = shift; my $time = shift || time(); return bless { time => $time }, $class; } sub to_string { my $self = shift; return scalar localtime $self->{time}; } 1; __END__
DateStringz.pmモジュールソース(DateStringzクラス)
DateStringz.pm package DateString::DateStringz; use strict; sub test3 { return "$_[0]---DateStringz---$_[1]"; } sub new { my $class = shift; my $time = shift || time(); return bless { time => $time }, $class; } sub to_string { my $self = shift; return scalar localtime $self->{time}; } 1; __END__
実行結果(tstobject2.pl)
C:\xxx>tstobject2.pl -------------------------------------------01 DateString::DateStringx---DateStringx--- -------------------------------------------02 DateString::DateStringx=HASH(0x285f18)---DateStringx--- -------------------------------------------03 DateString::DateStringx---DateStringx--- DateString::DateStringz=HASH(0x183048c)---DateStringz--- -------------------------------------------04 DateString::DateStringx=HASH(0x285f18)---DateStringx--- DateString::DateStringz=HASH(0x183048c)---DateStringz---
ちなみに、ここでは、クラスをインスタンス化したものをオブジェクトと書いてます。
クラスは、モジュールそのものです。
オブジェクトは、クラスのメソッド(コンストラクタ)がblessしたリファレンスを返したもの(インスタンス)。