Методи __clone

Методи __clone ба таври худкор ҳангоми истифода оператори clone фаро хонда мешавад. Он имкон медиҳад, ки мантиқи нусхабардории фардии объект муайян карда шавад. Ба таври пешфарз PHP нусхабардории рӯизаминаи ҳамаи хусусиятҳои объектро иҷро мекунад. Методи __clone судманд аст вақте ки нусхабардории чуқур татбиқ кардан лозим аст ё рафтори клон кардани объектро тағйир додан лозим аст.

Синтаксис

phppublic function __clone(): void

Мисол

Клон кардани асосии объектро татбиқ мекунем:

php<?php
  class User {
    public $name;
    
    public function __construct($name) {
      $this->name = $name;
    }
    
    public function __clone() {
      echo 'Объект клон карда шуд';
    }
  }
  
  $user1 = new User('John');
  $user2 = clone $user1;
?>

Натиҷаи иҷрои код:

php'Объект клон карда шуд'

Мисол

Клон кардани чуқури объектро бо объектҳои ҷойгиршуда татбиқ мекунем:

php<?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', 'New York');
  $user2 = clone $user1;
  $user2->address->city = 'Boston';
  
  echo $user1->address->city;
?>

Натиҷаи иҷрои код:

php'New York'

Мисол

Шиносаи ягонаро ҳангоми клон кардан илова мекунем:

php<?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('Laptop');
  $product2 = clone $product1;
  
  echo $product1->id . ' ' . $product2->id;
?>

Натиҷаи иҷрои код (мисол):

php'5f1a2b3c 5f1a2b3d'

Ҳамчунин бубинед

  • методи __construct,
    ки созандаи объект мебошад