__clone
De operator clone
In PHP 4 was het zo dat als je een bestaand object toewees aan een nieuwe variabele, dat in de nieuwe variabele een kopie van dit object zat. Dat is echter niet logisch. Bekijk het volgende voorbeeld.
Code (php)
Output PHP 4:
Output PHP 5:
Dit verschil is te verklaren doordat PHP 4 een kopie van $a opslaat in $b, en PHP 5 een referentie van $b naar $a maakt. Dat wil zeggen dat $a en $b in PHP 4 eigenlijk helemaal los van elkaar staan, terwijl in PHP 5 $a en $b eigenlijk dezelfde variabele is. Een reference dus.
Als je echter in PHP 5 een object wil kopiƫren, in plaats van er naar wil verwijzen, dan is er de operator clone beschikbaar in PHP 5. Dus:
Code (php)
Bovenstaand script zal als output hebben:
Magic method __clone
Als een object gekloond wordt met clone, dan wordt zijn magische functie __clone() aangeroepen, mits deze is gedefinieerd.
Code (php)
Bovenstaand script zal als output hebben:
Zoals je ziet is __clone() een soort constructor voor het nieuwe object. De wijzigingen die __clone() aanbrengt gelden voor het nieuwe object en niet voor het oude object. Dus $a blijft in bovenstaand geval ongewijzigd, terwijl $b->Boek een nieuwe waarde heeft gekregen.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- __construct
- __destruct
- __sleep & __wakeup
- __toString
- __clone
- __autoload
- __set_state
- __get, __set, __call, __isset, __unset
- Links