Avatar billede hansi67 Nybegynder
12. december 2007 - 09:46 Der er 4 kommentarer og
1 løsning

class construct / destruct - lukning af DB conn

Davs,

Jeg skal til at starte på at lave et lille projekt vha. php og har tænkt mig at arbejde med classer.
I den forbindelse er jeg lidt i tvivl om "leve tiden" når jeg kalder en classe.

F.eks. i nedenstående kode eks., hvornår vil det være bedst at lukke for databasen connectionen?
----
class Database
{
  var $connection;
 
  function __construct() {
    $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
    mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());
  }
}


$database = New Database;
---


Ville det være fint at lukke vha. af en destructer, like this:
---
class Database
{
  var $connection;
 
  function __construct() {
    $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
    mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());
  }

  function __destruct()  {
    mysql_close($this->connection);
  }
}
---
Avatar billede pidgeot Nybegynder
12. december 2007 - 13:47 #1
Connectionen bliver lukket automatisk af PHP når dit script slutter, så med mindre du får kaldt destructoren før det sker, kan det ikke betale sig at placere mysql_close der - en normal metode ville være mere passende.

Hvis du lukker manuelt (det er *generelt* ikke nødvendigt i PHP grundet oprydningen, men der er selvfølgelig undtagelser), bør du lukke den så snart du er færdig med at bruge databasen. Samtidigt bør du ikke åbne forbindelsen mere end en gang pr. script - din kode vil næsten med garanti køre bedre når du ikke gør.
Avatar billede hansi67 Nybegynder
12. december 2007 - 16:24 #2
Mange tak for svaret.

ok, jeg forstå det sådan at jeg ikke behøver at lukke i __destruct() da dette alligevel automatisk sker, når scriptet slutter.

Men det kunne måske være en ide at lave lukke function i classen Database:
---
function CloseDB(){
  mysql_close($this->connection);
}
--
som så kan kaldes når jeg er færdig med med database conn. rundt omkring i diverse sripts.

er det korrekt?
Avatar billede pidgeot Nybegynder
12. december 2007 - 16:39 #3
Præcist. Det er sjældent nødvendigt (og kan i vises tilfælde få scriptet til at tage lidt længere tid om at blive færdigt), men hvis man har brug for den, så er den jo rar at have :)
Avatar billede pidgeot Nybegynder
12. december 2007 - 16:39 #4
...og du kan lige så godt få et svar nu til når du lukker.
Avatar billede hansi67 Nybegynder
12. december 2007 - 16:48 #5
super .. point givet
  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester