URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4132
[ Назад ]

Исходное сообщение
"help по ООП на перле"

Отправлено thirteensmay , 02-Апр-05 19:50 
Уважаемые подскажите пожайлуста !
Есть вот такой конструктор "объекта":
sub new
{
  my $self = {};
  $self{dsn} = "DBI:$DBType:$DBName;$DBHost";
  $self{dbh} = DBI->connect($self{dsn}, $DBLogin, $DBPassword) || print $DBI::errstr;
  $self{sth} = undef;
  $self{res} = undef;
  bless($self);
  return $self;
}
ну и методы ессно...
Пользую например так:
  $conn = MyDBI->new(...);
  $conn->query("select value from setup where name='$_[0]'");
  $conn->rowpresent();
  $result = $conn->rowfield('value');
  $conn->freeresult();
  $conn->destroy();
Так вот, до тех пор пока такой "объект" у меня один - все оk,
но стоит сделать хотябы два чтобы они перекрывались,
например так:
  $conn = MyDBI->new(...);
    $conn2 = MyDBI->new(...);
    ...
    $conn2->destroy();
  $conn->query("select value from setup where name='$_[0]'");
  ...
то после выполнения $conn2->destroy();
падает и $conn тоже, я так понимаю они "не совсем разделяются",
т.е. совсем не разделяются, хотя bless($self); вроде есть.
На перле пишу недавно, с ООП уже все мозги протер,
подскажите где у меня тут косяк, как их разделить ?

Содержание

Сообщения в этом обсуждении
"help по ООП на перле"
Отправлено rWizard , 04-Апр-05 22:01 
может стоит попробовать сначала
bless, а потом
$self->{DBI} = DBI->connect(...)

"help по ООП на перле"
Отправлено ACCA , 05-Апр-05 03:21 
Включен ли у тебя в модуле use strict?

>  $self{dsn} = "DBI:$DBType:$DBName;$DBHost";

и $self{'dsn'} - совсем разные вещи.