09/10/2018, 23:58

mong giải thích __clone method ?

hix em đang học php nhưng đọc đến thằng này(clone) thấy khó hiểu quá bác nào có thể giúp em giải thích được không ạ.Thanks nhiều
3do viết 02:05 ngày 10/10/2018
clone dùng để tạo 1 object y hệt object cũ
duaconcuanui viết 02:04 ngày 10/10/2018
bác nói dõ hơn đựoc không việc sử dụng clone thì em biết nhưng mà em thắc mắc cái __clone method sử dụng sẽ thế nào, em đọc mãi mà không hiểu được
3do viết 02:11 ngày 10/10/2018
__clone method dùng để thực thi 1 việc gì đó khi lẹnh clone được gọi.

Trong ví dụ ở http://www.php.net/manual/en/language.oop5.cloning.php
PHP Code:
<?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()
    {
        
// Force a copy of this->object, otherwise
        // it will point to same object.
        
$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);

?>
hàm __clone được dùng để tăng biến instance lên 1 mỗi lần được clone
duaconcuanui viết 02:13 ngày 10/10/2018
bạn có thể nói rõ hơn cho mình đoạn này được không
PHP Code:
 $this->object1 = clone $this->object1
3do viết 02:03 ngày 10/10/2018
đoạn đó là clone object1 thành 1 object mới, sau đó lưu đè vào object1.
donguyenkha viết 02:14 ngày 10/10/2018
Đơn giản là vậy này:
Nếu trong PHP4:
PHP Code:
$object2 $object1
thì khi các thuộc tính của object1 thay đổi thì object2 không thay đổi
Trong PHP5 thì khác
Nếu dùng khai báo trên thì object1 hay object2 cũng chỉ là một đối tượng, nếu 1 trong 2 thay đổi ra sao thì cái còn lại cũng thay đổi y vậy. Tương đương với
PHP Code:
$object2 = &$object1
trong PHP4
Nếu muốn object2 độc lập như trong php thì phải dùng clone
PHP Code:
$object2 = clone $object1
Bài liên quan
0