Mbinu ya __clone

Mbinu __clone huitwa moja kwa moja wakati wa kutumia kiendeshaji clone. Inaruhusu kufafanua mantiki maalum ya nakala ya kitu. Kwa default, PHP hufanya nakala ya juu ya sifa zote za kitu. Mbinu __clone ni muhimu wakati inahitajika kutekeleza nakala ya kina au kubadilisha tabia wakati wa uigaji.

Syntax

phppublic function __clone(): void

Mfano

Tutekeleze uigaji wa msingi wa kitu:

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

Matokeo ya utekelezaji wa kificho:

php'Kitu kimeigwa'

Mfano

Tutekeleze nakala ya kina ya kitu na vitu vilivyomo:

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;
?>

Matokeo ya utekelezaji wa kificho:

php'New York'

Mfano

Tuongeze kitambulisho cha kipekee wakati wa uigaji:

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;
?>

Matokeo ya utekelezaji wa kificho (mfano):

php'5f1a2b3c 5f1a2b3d'

Tazama pia