Toidicode.com

Toidicode.com

BASIC TO ADVANCE

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().

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha