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() và __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!



0 Comments