Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     13 Jun 2003  10:44:02
 To : Mikhail Polykovsky
 Subject : Re: BEGIN - DESTROY
 -------------------------------------------------------------------------------- 
 
 Хмутро.
 MP> Здравствуйте.
 MP> Допустим, есть класс, все экземпляры которого пользуются коннектом к
 MP> базе (одним на все экземпляры).
 
 MP> package My;
 MP> use DBI;
 
 MP> my $dbh;
 
 MP> sub BEGIN{
 MP>     $dbh = connect_to_database();
 MP> }
 
 MP> sub new{
 MP>     # tru-la-la
 MP>     $self->{'handle'} = $dbh;
 MP> }
 
 MP> Вопрос в том, как мне организовать DESTROY? Если отключаться от базы в
 MP> нем, тогда скрипт отключится при первом удалении объекта, остальные не
 MP> смогут работать с базой. А если вообще ни один экземпляр не
 MP> создавался, DESTROY не будет вызван, и коннект повиснет. Как
 MP> поступить?
 
 MP> З.Ы. Вопрос не про конкретное подключение, а вообще про подобные
 MP> реализации.
 
 Если ты инициализируешь $dbh в BEGIN, то по смыслу он у тебя живет все время
 работы процесса, и отцепляться надо посредством
 
 END { undef $dbh; }
 
 Впрочем, тоже не обязательно - само сдохнет по завершении процесса. То есть
 смысл это имеет только если тебе по умолчанию надо commit сделать:
 
 END { $dbh->commit; }
 
 А "вообще" надо сначала определиться, когда коннект становится нужен, а когда
 - уже нет. От этого зависит и то, как делать. Если надо, например, класть
 коннект по сдыханию последнего пользователя, то его и создавать надо по
 созданию первого. Тогда можно, например, завести счетчик ссылок (в случае с
 DBI::db его можно прямо в объекте держать), перловый не годится из-за лишней
 ссылки, и в DESTROY проверять, сколько там осталось пользователей. В
 конструкторе, соответственно,
 
 $dbh ||= connect_to_database();
 
 $dbh->{private_my_link_count}++;
 
 -- 
 Artem Chuprina
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 BEGIN - DESTROY   Mikhail Polykovsky   13 Jun 2003 10:13:17 
 Re: BEGIN - DESTROY   Artem Chuprina   13 Jun 2003 10:44:02 
 Re[2]: BEGIN - DESTROY   Mikhail Polykovsky   13 Jun 2003 11:04:27 
 Re: Re[2]: BEGIN - DESTROY   Artem Chuprina   14 Jun 2003 23:58:04 
 BEGIN - DESTROY   P4elovod Planety   20 Jun 2003 23:15:55 
Архивное /ru.perl/1147709fdca5d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional