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ả

TaiVT

TaiVT

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