PHP: Clone đối tượng

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Việc tạo một bản sao của một đối tượng với đầy đủ các thuộc tính được sao chép đôi khi là điều cần thiết. Một ví dụ là sự cần thiết phải sao chép các hàm tạo là nếu bạn có một đối tượng thể hiện một cửa sổ GTK và đối tượng đó chứa tài nguyên của cửa sổ GTK, khi bạn tạo bản sao bạn có thể muốn tạo một cửa sổ mới với các thuộc tính tương tự và có đối tượng mới chứa tài nguyên của cửa sổ mới. Một ví dụ khác là nếu đối tượng của bạn chứa một tham chiếu tới đối tượng khác và khi bạn nhân bản đối tượng cha bạn muốn tạo một thể hiện mới của đối tượng khác này để việc nhân bản có bản copy độc lập của chính nó.

Một đối tượng được sao chép được tạo bằng cách sử dụng từ khóa clone (điều này sẽ gọi tới phương thức __clone() của đối tượng nếu cần thiết). Phương thức __clone() của đối tượng không thể được gọi trực tiếp. Ví dụ,

$copy_of_object = clone $object;

Khi một đối tượng được nhân bản thì PHP 5 sẽ tạo một bản copy mức thấp các thuộc tính của đối tượng. Bất kỳ thuộc tính nào tham chiếu tới các biến khác nhau sẽ đều được giữ giam chiếu. Cú pháp của phương thức __clone() như sau:

void __clone ( void )

Sau khi nhân bản hoàn chỉnh thì phương thức __clone() sẽ được định nghĩa, khi đó phương thức __clone() của đối tượng mới được tạo sẽ được gọi, và nó cho phép bất kỳ thuộc tính cần thiết nào cũng có thể thay đổi được.

Ví dụ 1: Nhân bản đối tượng

<?php
class SubObject
{
    static 
$instances 0;
    public 
$instance;

    public function 
__construct() {
        
$this->instance = ++self::$instances;
    }

    public function 
__clone() {
        
$this->instance = ++self::$instances;
    }
}

class 
MyCloneable
{
    public 
$object1;
    public 
$object2;

    function 
__clone()
    {
        
// Tạo bản sao của this->object, nếu không
        // nó sẽ trỏ đến cùng một đối tượng.
        
$this->object1 = clone $this->object1;
    }
}


$obj = new MyCloneable();

$obj->object1 = new SubObject();
$obj->object2 = new SubObject();

$obj2 = clone $obj;


print(
"Original Object:\n");
print_r($obj);

print(
"Cloned Object:\n");
print_r($obj2);

?>

 Output của ví dụ trên:

Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
» Tiếp: So sánh đối tượng
« Trước: ErrorException
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!