|
Тема |
Re: DESTROY i DBI.pm [re: edno momiche] |
|
Автор |
Bruta () |
|
Публикувано | 17.09.02 13:27 |
|
|
Taka...
znachi v paketa imam nqkolko globalni za nego promenlivi. $population - tq broi kolko obekta imam syzdadeni. @objects - vseki element na masiva e referenciq kym nqkoi moi obekt po reda na syzdavaneto im.
Opciite s koito se svyrzvam kym bazara danni (MySQL) sa:
my $opt = { 'AutoCommit' => 1,
'PrintError' => 1,
'RaiseError' => 0 };
Ne izpolzvam tranzakcii.
Eto go i konstruktora:
sub new
{
my($pkg, $db, $user, $pass) = @_;
my($object);
if(!@objects) #ako nqma definirani drugi obekti
{
@_ == 4 or die 'Usage: db->new(database, user, password);';
my $dsn = 'dbi:mysql:'.$db.';mysql_socket=/tmp/mysql/mysql.sock';
($dbh = DBI->connect($dsn, $user, $pass, $opt)) or die $DBI::errstr;
$object->{dbh} = $dbh;
$object->{user} = $user;
$object->{pass} = $pass;
$object->{db} = $db;
$object->{id} = 0;
$population = 1; #inicializirame broqcha na obektite
push @objects, $object; #pyrviqt element na masiva sochi kym pyrviq obekt
}
else
{
$object->{dbh} = $dbh; #vzema syshtata referenciq kato pyrviq obekt
$object->{user} = $objects[0]->{user}; #i usera e syshtiq
$object->{pass} = $objects[0]->{pass};
$object->{db} = ($db or $objects[0]->{db}); #ako e podadena baza danni
push @objects, $object; #vzemame referenciqta kym obekta, i pri drugite
$object->{id} = $#objects; #id-to na tozi obekt e posledniq element na masiva
$population++; #incrementirame broq na obektite
}
return bless $object, $pkg;
}
nadqvam se che koda se razbira. shte dam malko dopylnitelni svedeniq za atributite.
$object{dbh} - stoinosta na tova e ravna na tazi na $dbh. crez nego izpylnqvam do(), fetch(), ...
{user} - usera s koito sym se svyrzal s bazata
{pass} - parolata
{db} - bazata danni v koqto shte raboti obekta
{id} - s tova znam tozi obekt koi pored mi e, i taka znam kyde v @objects se namira toi
samo pri syzdavaneto na pyrviq obekt iziskvam user i pass. Pri sledvashtite ne sa mi nujni tyi kato izpolzvam syshtata konekciq. Za vseki obekt moje da se zadade v koq baza danni da operira, predpolagam che usera ima prava za tova. Ako ne e zadadena, izpolzvam tazi na pyrviq obekt.
sega eto q i DESTROY:
sub DESTROY
{
# print "\nDESTROY\n";
my($self) = $_[0];
$population--; #dekrementiram broq na obektite
$objects[$self->{id}] = undef; #referenciq kym tozi obekt ne mi e nujna veche
# print "POPULATION: $population\n";
$dbh->disconnect() and print "\n\nDISCONNECT\n\n" if $population == 0; #i ako tova e posledniq mi obekt, disconnect
}
reshih da izpolzvam metoda s broene na obektite, poneje go vidqh v edna kniga...:-)
Tova koeto iskam e da znam che vryzkata mi s bazata danni shte se prekysne kogato veche nqmam aktivni moi obekti, a po kakyv nachin tochno shte e...
10x.
P.S. izvinqvam se za podredbata na koda, obache se premahvat intervalite...
|
| |
|
|
|