__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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

class Foo {
    public $Boek;
}


$a = new Foo;
$a->Boek = 'Harry Potter en de 7 dwergen';

$b = $a;
$b->Boek = 'Harry Potter en de 7 PHPhulpers';

echo $a->Boek;

?>


Output PHP 4:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Harry Potter en de 7 dwergen


Output PHP 5:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Harry Potter en de 7 PHPhulpers


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

class Foo {
    public $Boek;
}


$a = new Foo;
$a->Boek = 'Harry Potter en de 7 dwergen';

$b = clone $a;
$b->Boek = 'Harry Potter en de 7 PHPhulpers';

echo $a->Boek;

?>


Bovenstaand script zal als output hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Harry Potter en de 7 dwergen



Magic method __clone
Als een object gekloond wordt met clone, dan wordt zijn magische functie __clone() aangeroepen, mits deze is gedefinieerd.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

class Foo {
    public $Boek;
    
    public function __clone() {
        $this->Boek = 'Harry Potter en de 7 PHPhulpers';
    }
}


$a = new Foo;
$a->Boek = 'Harry Potter en de 7 dwergen';

$b = clone $a;
echo $b->Boek;

?>


Bovenstaand script zal als output hebben:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Harry Potter en de 7 PHPhulpers


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.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. __construct
  3. __destruct
  4. __sleep & __wakeup
  5. __toString
  6. __clone
  7. __autoload
  8. __set_state
  9. __get, __set, __call, __isset, __unset
  10. Links

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.