347 of 410 menu

Metode __clone

Metode __clone tiek izsaukta automātiski, izmantojot operatoru clone. Tā ļauj definēt pašu objekta kopēšanas loģiku. Pēc noklusējuma PHP veic virspusēju visu objekta īpašību kopēšanu. Metode __clone ir noderīga, kad nepieciešams realizēt dziļo kopēšanu vai mainīt uzvedību klonēšanas laikā.

Sintakse

public function __clone(): void

Piemērs

Realizēsim pamata objekta klonēšanu:

<?php class User { public $name; public function __construct($name) { $this->name = $name; } public function __clone() { echo 'Objekts noklonēts'; } } $user1 = new User('John'); $user2 = clone $user1; ?>

Koda izpildes rezultāts:

'Objekts noklonēts'

Piemērs

Realizēsim dziļo objekta kopēšanu ar ligzdotiem objektiem:

<?php class Address { public $city; public function __construct($city) { $this->city = $city; } } class User { public $name; public $address; public function __construct($name, $city) { $this->name = $name; $this->address = new Address($city); } public function __clone() { $this->address = clone $this->address; } } $user1 = new User('John', 'Ņujorka'); $user2 = clone $user1; $user2->address->city = 'Bostona'; echo $user1->address->city; ?>

Koda izpildes rezultāts:

'Ņujorka'

Piemērs

Pievienosim unikālu identifikatoru klonēšanas laikā:

<?php class Product { public $id; public $name; public function __construct($name) { $this->id = uniqid(); $this->name = $name; } public function __clone() { $this->id = uniqid(); } } $product1 = new Product('Klēpjdators'); $product2 = clone $product1; echo $product1->id . ' ' . $product2->id; ?>

Koda izpildes rezultāts (piemērs):

'5f1a2b3c 5f1a2b3d'

Skatiet arī

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt