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

 
Password Recovery for Drupal 7

Khôi phục mật khẩu trong Drupal 7

Actually recovering your original password in Drupal 7 is not possible, but resetting one is possible and we're going to show you how to do it.

Barracuda Master Installer

Barracuda is a bash script to install and/or upgrade, tuned for high performance, Aegir Master Instance with all related system services. Barracuda is compatible with Octopus installer.

Google

5 lý do để Apple không kiện Google

Mặc dù Apple đã dành chiến thắng quyết định trong vụ kiện với Samsung, có rất nhiều lý do để họ không tiếp tục tấn công nhà phát triển nền tảng Android là Google.

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

 

Diet con trung