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

 
Hướng dẫn sử dụng Mailchip và Drupal

Hướng dẫn sử dụng Mailchip và Drupal

Email là một trong những công cụ được đánh giá là hiệu quả và ít tốn kém nhất trong chiến dịch marketing online. Tuy nhiên để có một e-mail hấp dẫn, một chiến lược e-mail marketing hiệu quả thì không thể thiếu các công cụ hỗ trợ.

Pantone 19-4052 Classic Blue - màu sắc mới của năm 2020

Pantone 19-4052 Classic Blue - màu sắc mới của năm 2020

Pantone vừa mới công bố màu của năm 2020 là Classic-Blue. Màu của niềm tin, của sự tập trung và rõ ràng trong định hướng

14 Modules cần thiết cho website Drupal 7 của bạn

14 Modules cần thiết cho website Drupal 7 của bạn

That’s because out of the box Drupal isn’t very user friendly. As with everything Drupal, it requires a few contributed modules in order to really make it shine

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

 

Diet con trung