Сейчас попробую. Спасибо.
2 октября 2012 г., 16:01 пользователь Andrij Panov <[email protected]>написал: > Hi. > > 2012/10/2 Artem Zhuravlev <[email protected]>: > > Быть может не правильно выразился. > > > > У меня есть Объект который создается при запуске сценария и в его данных > > есть объект входа в базу, и набором методов. Я могу добраться к данным > > методам как и главном сценарии так и в Пакете Core. Но как сделать это ж > > другом пакете к примеру Test.pm. > > > > Суть в следующем я могу добраться к параметрам объекта $query > > (CGI::Fast->new()) когда мы попытаемся перейти на страничку /?page=one. > > > > Есть некий пакет One.pm который будет загружаться при переходе в котором > > будет обращение в базе и выводом определенных данных. > > > > Как в пакете One.pm мне достучаться к методам работающими с базой. > > Не проще ли в метод который будет вызываться из One.pm передавать > указатель на Core? > > One::handler($init, @other_args); > > > > Быть может рассуждаю не верно. Только учусь. > > > > Спасибо по этой статье и начинал осваивать ООП. > > > > 2 октября 2012 г., 15:04 пользователь Alexandr Alexeev < > [email protected]> > > написал: > > > >> Не уверен, что полностью понял ваш вопрос, но надеюсь, это вам > пригодится: > >> > >> 1. Не работайте с атрибутами напрямую, пишите вокруг них > >> обертки-методы. Если лень писать, используйте Mouse например. > >> 2. Не похоже, что в вашем случае требуется использовать наследование. > >> Вообще наследованием часто злоупотребляют, настоящая потребность в нем > >> возникает довольно редко. Вам точно не подойдет делегирование? > >> 3. Разобраться с ООП в Perl может помочь эта заметка: > >> http://eax.me/perl5-oop/ На самом деле там все довольно просто - bless > >> превращает переменную в объект, а оператор стрелка преобразует вызов > >> $obj->method($a, $b) в MyPackage::method($obj, $a, $b); > >> > >> 2012/10/2 Artem Zhuravlev <[email protected]>: > >> > Помогите, окончательно запутался. > >> > > >> > Есть сценарий > >> > > >> > #!/usr/bin/perl -w > >> > BEGIN { > >> > $ENV{FCGI_SOCKET_PATH} = ":8000"; > >> > $ENV{FCGI_LISTEN_QUEUE} = 10; > >> > use CGI::Carp qw/carpout/; > >> > open LOG, ">>", "carp.log" or die("Cannot open file: $!\n"); > >> > carpout(LOG); > >> > use lib "/home/artem/FCGI"; > >> > } > >> > use strict; > >> > use 5.010; > >> > use HTML::Template; > >> > use Data::Dumper; > >> > use engine::class::Page; > >> > use engine::class::Core; > >> > use CGI::Fast; > >> > use POSIX qw(strftime); > >> > our $query_cnt = 0; > >> > our $query; > >> > > >> > while($query= CGI::Fast->new()) { > >> > print "Content-type: text/html\n\n"; > >> > eval{ > >> > $query_cnt++; > >> > my $init = Core->new($query_cnt); > >> > #say Dumper ($init); > >> > foreach my $get ($init->{db}->query("select * from city")){ > >> > say $get->{name}." || "; > >> > } > >> > }; > >> > if ($@){ > >> > my $now_string = strftime "%Y-%m-%d %H:%M:%S", localtime; > >> > open FILE, ">>", "carp.log" or next("Cannot open file: $!\n"); > >> > print FILE "[".$now_string."][Eval error]".$@."\n"; > >> > close FILE; > >> > } > >> > } > >> > > >> > > >> > пакеты и классы > >> > > >> > #!/usr/bin/perl > >> > package Core; > >> > use engine::class::DB; > >> > @ISA = qw/DB/; > >> > use warnings; > >> > use strict; > >> > use 5.010; > >> > sub new { > >> > my $class = shift; > >> > my $self = { > >> > version => '1.0', > >> > }; > >> > bless $self, $class; > >> > $self->init(@_); > >> > $self->db(); > >> > return $self; > >> > } > >> > sub init{ > >> > my $self = shift; > >> > $self->{query_cnt} = shift; > >> > return $self; > >> > } > >> > sub db { > >> > my $self = shift; > >> > my $db = DB->dbconnect("логин", "пароль", "база" , "хост", "utf8", > >> > "utf8" , > >> > "180" ); > >> > $self->{db} = $db; > >> > return $self; > >> > } > >> > return 1; > >> > > >> > > >> > #!/usr/bin/perl > >> > package DB; > >> > use DBI; > >> > use strict; > >> > use warnings; > >> > > >> > sub dbconnect > >> > { > >> > my $class = shift; > >> > my $self = { > >> > _login => shift, > >> > _password => shift, > >> > _dbname => shift, > >> > _host => shift, > >> > _charset => shift, > >> > _names => shift, > >> > _timeout => shift, > >> > }; > >> > bless $self, $class; > >> > $self->connect(); > >> > return $self; > >> > } > >> > > >> > > >> > sub connect > >> > { > >> > my $self = shift; > >> > $self->{_base} = > >> > > DBI->connect("DBI:mysql:database=$self->{_dbname};host=$self->{_host}", > >> > "$self->{_login}", "$self->{_password}") or die "Unable to connect: > >> > $DBI::errstr\n"; > >> > $self->{_base}->do("SET charset $self->{_charset}"); > >> > $self->{_base}->do("SET names $self->{_names}"); > >> > $self->{_base}->do("SET session wait_timeout=$self->{_timeout}"); > >> > } > >> > > >> > sub query > >> > { > >> > my( $self, $query ) = @_; > >> > $self->connect() unless $self->{_base}->ping(); > >> > my $sth = $self->{_base}->prepare($query); > >> > $sth->execute; > >> > return (@{$sth->fetchall_arrayref({})}) and $sth->finish; > >> > } > >> > > >> > sub query_rw > >> > { > >> > my( $self, $query ) = @_; > >> > $self->connect() unless $self->{_base}->ping(); > >> > $self->{_base}->do($query); > >> > } > >> > > >> > sub disconnect > >> > { > >> > my $self->{_base}->disconnect; > >> > } > >> > > >> > sub db_handle > >> > { > >> > my $self = shift; > >> > return $self->{_base}; > >> > } > >> > > >> > > >> > return 1; > >> > > >> > > >> > Как мне построить наследование, что б в неком пакете Test я мог > >> > добраться до > >> > объекта коннекта в базу из Core->{db} и использовать методы класса DB. > >> > > >> > В основном сценарии все работает в вот в последующем не получается > >> > добраться. > >> > > >> > Спасибо. > >> > > >> > > >> > -- > >> > Moscow.pm mailing list > >> > [email protected] | http://moscow.pm.org > >> > > >> > >> > >> > >> -- > >> С уважением, Александр > >> Личный блог: http://eax.me/ > >> Мой форум: http://it-talk.org/ > >> Мой Twitter: http://twitter.com/afiskon > >> -- > >> Moscow.pm mailing list > >> [email protected] | http://moscow.pm.org > > > > > > > > -- > > Moscow.pm mailing list > > [email protected] | http://moscow.pm.org > > > > > > -- > Best regards, > Andrij Panov. > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
