__destruct
Hoe en wat
Naast de constructor heb je ook de destructor. De destructor kun je ook in de klasse definiëren en wordt aangeroepen als een instantie van een klasse wordt verwijderd (met unset()) en alle references naar deze instantie ook. Als de instantie niet verwijderd is dan wordt de destructor altijd aan het einde van de script-execution aangeroepen. Onthoud goed: ook al verwijder je een instantie van een klasse, maar er bestaan nog references naar die instantie, dan wordt de destructor nog niet aangeroepen.
Voorbeeld:
2
3
4
5
6
7
8
9
10
11
12
$a = new foo();
$b = $a;
unset($a); // dit is NIET genoeg. er is nog een reference naar $a in $b.
unset($b); // nu wordt wel de destructor uitgevoerd
/* Note: in PHP 5 worden objecten ALTIJD by reference aan elkaar doorgegeven en nooit gekopieerd. als je een object wil kopieëren dan zul je de operator clone moeten gebruiken. meer hierover op één van de volgende pagina's */
?>
In de praktijk
In de praktijk is een destructor vaak handig om troep op te ruimen. Hiermee bedoel ik; stel je hebt een database-connectie, dan kun je de destructor de connectie automatisch laten sluiten. Want de destructor wordt na de PHP execution uitgevoerd, dus als alle code al is geparsed en uitgevoerd.
LET OP: als een destructor van een andere klasse gebruikt maakt van een database-connectie, dan moet je NIET de destructor gebruiken om de database-connectie te sluiten. Het kan dan namelijk zo zijn dat de database-destructor éérst wordt aangeroepen en daarna pas de destructor van de andere klasse. Gevolg; die andere destructor kan niet meer met de database praten. Ik vind zelf overigens dat je geen database-connecties moet gebruiken in destructors, mede vanwege bovenstaande reden.
Wat je dus wel altijd zeker weet is dat een destructor altijd wordt uitgevoerd op een bepaald moment, alleen het is niet altijd te voorspellen wanneer precies vanwege de references en aangemaakte objecten.
Inhoudsopgave
- Inleiding
- __construct
- __destruct
- __sleep & __wakeup
- __toString
- __clone
- __autoload
- __set_state
- __get, __set, __call, __isset, __unset
- Links