Hướng đối tượng trong PHP : __sleep() và __ wakeup()

Hướng đối tượng trong PHP : __sleep() và __ wakeup()

Phương thức __sleep() và __wakeup() không được nhắc đến nhiều nhưng với dự án lớn thì sẽ cần thiết. Tài liệu tiếng việt không nói rõ nhiều về hai phương thức này chỉ còn cách xem diễn giải từ tài liệu nước ngoài, bài viết này sẽ giới thiệu về ý nghĩa và cách sử dụng của hai phương thức trên.

 __sleep() được thực thi khi đối tượng được lưu tạm thời thành chuỗi với hàm serialize(), phương thức sẽ trả về mảng các với các phần tử là các thuộc tính sẽ được lưu vào chuỗi với hàm serialize()

__wakeup() được thực thi khi hàm unserialize được gọi, phương thức sẽ phục hồi lại đối tượng được lưu trong chuỗi trả về từ hàm serialize()

Sau đây chúng ta sẽ tìm hiểu cách sử dụng từ ví dụ sau:

Tạo file student.class.php

class Student{
   private $full_name='';
   private $score = 0;
   private $grades = array();
   public function __construct($full_name, $score, $grades){
        $this->full_name = $full_name;
        $this->grades = $grades;
        $this->score = $score;
   }
   public function show(){
        echo $this->full_name;
        print_r( $this->grades);
   }
   function __sleep(){
        echo 'Going to sleep...';
        return array('full_name', 'grades', 'score');
   }
   function __wakeup(){
        echo 'Waking up ...';
   }
}

Ở trên __sleep() trả về mảng với 3 tham số là 3 thuộc tính sẽ được lưu tạm thời với hàm serialize()

Tạo file a.php khởi tạo đối tượng, chạy hàm serialize và lưu chuỗi thông tin vào file string.txt

include 'student.class.php';
$student = new Student('Ngo Van Khuong','a',array('a'=>90,'b'=>100));
$student->show();
$s = serialize($student);
file_put_contents('string.txt',$s);

Chạy file trên trong trình duyệt chúng ta sẽ nhận được "Ngo Van KhuongArray ( [a] => 90 [b] => 100 ) Going to sleep...",  ta thấy phương thức __sleep() đã được thực thi

Tạo file b.php để phục hồi phương thức từ chuỗi tạm thời

include 'student.class.php';
$s = file_get_contents('string.txt');
$a = unserialize($s);
$a->show();

Chạy file trên trong trình duyệt chúng ta sẽ nhận được "Waking up ...Ngo Van KhuongArray ( [a] => 90 [b] => 100 )", ta thấy đối tượng đã được phục hồi và phương thức __wakeup đã được thực thi.

Tham khảo php.net

Tags: 
Bạn thấy bài viết này như thế nào?: 
Average: 7.3 (4 votes)
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Apple sẽ sử dụng camera 3D lên các sản phẩm tiếp theo

Apple sẽ sử dụng camera 3D lên các sản phẩm tiếp theo

Apple có thể đang trong quá trình chuẩn bị để mang camera 3D lên các thiết bị tiếp theo của hãng.

Hơn 60% ứng dụng trên App Store chưa từng được tải về lần nào

Hơn 60% ứng dụng trên App Store chưa từng được tải về lần nào

Số liệu thống kê từ một bên thứ ba cho biết, có tới hơn 400.000 ứng dụng trên App Store chưa từng được một lần người dùng iOS tải về máy. Theo Phonearena, thống kê trên được đưa ra bởi hãng nghiên cứu Adeven dựa trên số liệu có được từ các ứng dụng iOS

Công cụ từ chối Backlink: Google’s Disavow Tool

Giới thiệu Ngày 16/10 chuyên gia nghiên cứu thuật toán, Matt Cutts đã thông báo về việc Google thêm một công cụ mới vào Google Webmaster Tools: Google’s Disavow Tool tạm dịch là “công cụ từ chối backlink”. Ai nên sử dụng tool này?

Công ty diệt chuột T&C

 

Diet con trung