DANH MỤC: PHP HƯỚNG ĐỐI TƯỢNG

Bài 22: Magic methods sleep và wakeup trong PHP


Tiếp tục với series bài hôm nay chúng ta sẽ tìm hiểu về __sleep() và __wakeup() magic methods trong PHP.

1, __sleep().

-Phương thức __sleep() sẽ được gọi khi chúng ta thực hiện serialize() đối tượng. 

-Thông thường khi chúng ta serialize() một đối tượng thì nó sẽ trả về tất cả các thuộc tính trong đối tượng đó. Nhưng nếu sử dụng __sleep() thì chúng ta có thể quy định được các thuộc tính có thể trả về.

-Chú ý: phương thức __sleep() luôn trả về giá trị là một mảng.

Cú pháp:

public function __sleep()
{
    return ['property1', 'property2', ..., 'propertyn'];
}

Trong đó: property1,property2,... là các thuộc tính sẽ được trả về khi serialize() đối tượng.

VD:

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;

    public function __sleep()
    {
        //trả về thuộc tính name
        return array('name');
    }
}

echo serialize(new ConNguoi());
//O:8:"ConNguoi":1:{s:4:"name";s:14:"Vũ Thanh Tài";}

-Như các bạn đã thấy: Khi chúng ta serialize() thì nó chỉ trả về các thuộc tính mà chúng ta quy định trong phương thức __sleep() và ở đây cự thể là name.

2, __wakeup().

-Phương thức __wakeup() sẽ được gọi khi chúng ta unserialize() đối tượng.

-Chúng thường được sử dụng để thực thi một hoặc nhiều hành động nào đó khi đối tượng được unserialize().

Cú Pháp:

public function __wakeup()
{
    //code
}

VD:

<?php

class ConNguoi
{
    private $name = 'Vũ Thanh Tài';
    private $age = 20;

    public function __sleep()
    {
        return array('name');
    }

    public function getName()
    {
        echo $this->name;
    }

    /**
     * gọi hàm getName khi unserialize()
     */
    public function __wakeup()
    {
        $this->getName();
    }
}

unserialize(serialize(new ConNguoi()));
//Kết quả: Vũ Thanh Tài.

-Như các bạn đã thấy thì hàm getName sẽ được gọi khi chúng ta unserialize() đối tượng ConNguoi.

3, Lời kết.

-Qua phần này mình hy vọng mọi người sẽ hiểu hơn về __sleep()__wakeup() magic methods trong PHP, phần tiếp theo chúng ta sẽ tìm hiểu về __toString() và __invoke().

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia