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