12. december 2007 - 09:46Der 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); } } ---
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.
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.
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 :)
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.