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

 
Xuất hiện nút “Đọc” và “Nghe” trên Facebook Tickers

Xuất hiện nút “Đọc” và “Nghe” trên Facebook Tickers

Một số người dùng báo cáo rằng họ đã bắt đầu thấy nút “Đọc” và “Nghe” trên Facebook kể từ khi nó được giới thiệu tại hội nghị F8 2011.

Apple, Google và Netflix không yêu cầu nhân viên có bằng Đại học

Apple, Google và Netflix không yêu cầu nhân viên có bằng Đại học

Các bạn học sinh, sinh viên cho rằng việc có được tấm bằng Đại học sau 4 năm học với khoản đầu tư để đi học lên tới hàng ngàn dollar là cách duy nhất để đặt chân vào làm việc tại các công ty hàng đầu như Apple, Google và Netflix

Tim Cook mới chỉ làm được một vài thay đổi rất nhỏ.

Apple đã thay đổi gì dưới thời Tim Cook?

Theo tờ WSJ, kể từ khi lên làm Giám đốc điều hành Apple vào tháng 8 thay cho “cố nhân” Steve Jobs tới giờ, Tim Cook mới chỉ làm được một vài thay đổi rất nhỏ.

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

 

Diet con trung