Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Meneroka fungsi ajaib PHP: __clone()

Meneroka fungsi ajaib PHP: __clone()

WBOY
WBOYasal
2023-06-19 22:28:401162semak imbas

Dalam pengaturcaraan berorientasikan objek PHP, sebagai tambahan kepada pembina biasa (__construct) yang digunakan untuk mencipta objek, terdapat juga banyak fungsi khas untuk operasi objek, yang dipanggil "fungsi ajaib". Antaranya, fungsi ajaib yang sangat penting ialah __clone(). Dalam artikel ini, kami akan meneroka ini.

1. Apakah itu __clone()

__clone() ialah fungsi khas dalam PHP yang dipanggil apabila objek disalin. Fungsinya adalah bersamaan dengan pengklonan objek, iaitu, menyalin objek ke objek baharu yang lain.

Apabila menggunakan fungsi __clone(), kita perlu memberi perhatian kepada beberapa perkara:

  1. Fungsi __clone() mesti ditakrifkan sebagai jenis awam, jika tidak, operasi klon akan gagal.
  2. Atribut yang diberikan dalam __clone() mestilah nilai baharu, bukan nilai asal, jika tidak objek asal akan ditukar.
  3. Sesetengah logik pengklonan boleh diproses dalam fungsi __clone().

Berikut ialah contoh yang menunjukkan fungsi __clone() :

class MyClass{
    public $name;
    public $age;
    public function __clone(){
        $this->age = 30;
    }
}

$obj1 = new MyClass();
$obj1->name = '小明';
$obj1->age = 20;

$obj2 = clone $obj1;

echo $obj1->name,$obj1->age."<br>";  //输出:小明20
echo $obj2->name,$obj2->age;         //输出:小明30

Seperti yang dapat dilihat daripada kod di atas, kami telah mentakrifkan kelas MyClass, yang mengandungi nama dan umur. harta benda. Dalam fungsi __clone(), kami menetapkan atribut $age kepada 30. Dalam objek $obj1 yang menjadikan kelas MyClass, kami menetapkan $name kepada "Xiao Ming" dan $age kepada 20. Apabila kita mencipta objek baharu $obj2 melalui operasi klon, nilai $name dan $age disalin ke objek baharu. Walau bagaimanapun, kerana kami menetapkan semula nilai dalam fungsi klon $age, nilai $age dalam objek $obj2 menjadi 30.

2. Senario penggunaan __clone()

Senario penggunaan __clone() agak istimewa dan perlu dinilai berdasarkan situasi sebenar.

  1. Pengklonan objek

Klon objek biasanya untuk mengelakkan menukar objek asal semasa operasi. Untuk sesetengah objek yang tidak boleh disalin, operasi pengklonan boleh membantu kami mencipta objek baharu. Ia adalah cara biasa untuk menggunakan fungsi __clone() untuk mengendalikan operasi objek pengklonan. Seperti yang ditunjukkan di bawah:

class Person{
    public $name;
    public $age;
    public $class;
    public function __clone(){
        $this->class = clone $this->class;
    }
}

class ClassRoom{
    public $name;
    public $roomNo;
}

$classObj = new ClassRoom();
$classObj->name = '一班';
$classObj->roomNo = 101;

$person1 = new Person();
$person1->name = '张三';
$person1->age = 18;
$person1->class = $classObj;

$person2 = clone $person1;

$person2->name = '李四';
$person2->age = 20;
$person2->class->name = '二班';

print_r($person1);  //输出Person对象信息
print_r($person2);  //输出Person对象信息

Dalam contoh ini, kami telah mentakrifkan dua kelas, kelas Orang dan kelas Bilik Kelas. Kelas Orang mengandungi tiga atribut: $name, $age dan $class. Antaranya, atribut $name dan $age adalah agak mudah, dan $class ialah objek yang dijadikan instantiated daripada kelas ClassRoom. Dalam fungsi __clone() kelas Person, kami mengklon atribut $class supaya atribut $class bagi objek $person1 dan $person2 menghala ke objek berbeza tanpa mengganggu satu sama lain.

  1. Salinan objek

Dalam pembangunan, kadangkala kita perlu menyalin objek untuk mengubah suainya semasa operasi tanpa menjejaskan nilai objek asal. Menggunakan fungsi __clone() untuk mengendalikan operasi penyalinan objek akan menjadikan pembangunan kami lebih pantas dan lebih mudah. Seperti yang ditunjukkan di bawah:

class Data{
    public $data = [];
    public function __clone(){
        $this->data = [];
    }
}

$data1 = new Data();
$data1->data = [1,2,3];

$data2 = clone $data1;
array_push($data2->data,4);

echo implode(',',$data1->data)."<br>";  //输出:1,2,3
echo implode(',',$data2->data)."<br>";  //输出:1,2,3,4

Dalam contoh ini, kami mentakrifkan kelas Data yang mengandungi atribut $data. Selepas membuat contoh objek $data1, kami menetapkan atribut $data kepada [1,2,3]. Melalui operasi klon, kami mendapat objek $data2 dan menambah 4 pada atribut $data2. Memandangkan kita menetapkan atribut $data kepada tatasusunan kosong dalam fungsi __clone(), objek $data2 yang diklonkan tiada kaitan dengan atribut $data $data1, dan menjadi dua tatasusunan berbeza.

3. Ringkasan

Fungsi __clone() ialah fungsi penting PHP dan sering digunakan untuk mengklon dan menyalin objek. Penggunaannya memerlukan perhatian kepada logik dan penyalinan atribut objek klon untuk memastikan objek klon itu sebenarnya objek baru. Semasa pembangunan, jika anda perlu mengklon atau menyalin objek, menggunakan fungsi __clone() boleh meningkatkan kecekapan pembangunan.

Atas ialah kandungan terperinci Meneroka fungsi ajaib PHP: __clone(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn