__ngủ trong php
|
Trước đây chúng ta đã đề cập đến cách lưu mảng trong PHP bằng cách sử dụng serialize(), unserialize(), urlencode() và urldecode(). Lưu các đối tượng hoạt động chính xác theo cùng một cách - bạn tuần tự hóa() chúng thành một chuỗi để tạo định dạng có thể lưu được, sau đó urlencode() chúng để có được định dạng có thể truyền qua web mà không gặp vấn đề gì
Show
Ví dụ
Tuy nhiên, có một tính năng đặc biệt với việc lưu các đối tượng, đó là khi serialize() và unserialize() được gọi, chúng sẽ tìm kiếm một hàm __sleep() và __wakeup() trên đối tượng mà chúng đang làm việc tương ứng. Các chức năng này, mà bạn phải tự cung cấp nếu muốn chúng làm bất cứ điều gì, cho phép bạn giữ cho một đối tượng hoạt động đúng cách trong thời gian ngủ đông của nó (khi nó chỉ là một chuỗi dữ liệu) Ví dụ: khi __sleep() được gọi, một đối tượng ghi nhật ký sẽ lưu và đóng tệp mà nó đang ghi và khi __wakeup() được gọi, đối tượng sẽ mở lại tệp và tiếp tục ghi. Mặc dù __wakeup() không cần trả về bất kỳ giá trị nào, nhưng __sleep() phải trả về một mảng các giá trị mà bạn muốn lưu. Nếu không có hàm __sleep(), PHP sẽ tự động lưu tất cả các biến, nhưng bạn có thể bắt chước hành vi này trong mã bằng cách sử dụng hàm get_object_vars() - sẽ sớm nói thêm về điều đó Trong mã, ví dụ về trình ghi nhật ký của chúng tôi sẽ trông như thế này
Bất kỳ đối tượng nào của lớp này được tuần tự hóa sẽ có __sleep() được gọi trên chúng, điều này sẽ lần lượt gọi saveAndExit() - một chức năng dọn dẹp thần thoại giúp lưu tệp và như vậy. Khi các đối tượng của lớp này không được đánh số thứ tự, chúng sẽ có hàm __wakeup() được gọi, hàm này sẽ gọi hàm openAndStart() Để PHP lưu tất cả các biến bên trong hàm __sleep(), bạn cần sử dụng hàm get_object_vars(). Điều này lấy một đối tượng làm tham số duy nhất của nó và trả về một mảng gồm tất cả các biến và giá trị của chúng trong đối tượng. Bạn cần chuyển các biến để lưu lại dưới dạng các giá trị trong mảng, vì vậy bạn nên sử dụng hàm array_keys() trên giá trị trả về của get_object_vars(), như thế này
Nếu không có gì trong hàm __sleep() của bạn ngoài việc trả về mảng, bạn nên xóa hoàn toàn hàm này vì nó không khác gì những gì PHP sẽ làm theo mặc định Nếu bạn thấy mình cần lưu các đối tượng, hãy ghi nhớ __sleep() và __wakeup() - chúng cùng nhau cho phép bạn giữ cho các đối tượng hoạt động hoàn toàn trên các trang Bạn muốn học PHP 7? Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó Hàm này trả về một giá trị khác 0 nếu cuộc gọi bị gián đoạn bởi tín hiệu. Trên Windows, giá trị này sẽ luôn là 192, là giá trị của hằng số WAIT_IO_COMPLETION trong Windows API. Trên các nền tảng khác, giá trị trả về sẽ là số giây còn lại để ngủ Chúng ta đã nghiên cứu trong các bài viết trước về các phương thức magiques__clone(), __set(), __get() và __call(). PHP thêm vào hai phương thức ma thuật bổ sung gần đây __sleep () và __wakeup () cho phép quá tải quy trình gốc của tuần tự hóa và hủy tuần tự hóa dữ liệu PHP. Đó là những gì chúng tôi sẽ giải thích trong phần hướng dẫn với một số ví dụ cụ thể và dễ hiểu.Chúng tôi sẽ đề cập đến các chủ đề sau trong hướng dẫn này Tuần tự hóa dữ liệu là gì?Tóm lại rất đơn giản, hành động để tuần tự hóa một biến là chuyển nó thành một chuỗi chẳng hạn, lưu trữ nó trong một tệp văn bản. Ngược lại, hành động giải tuần tự hóa một chuỗi là áp dụng quy trình nghịch đảo để khôi phục biến ban đầu. Quá trình này không giới hạn ở PHP, bạn sẽ tìm thấy nó ở nhiều ngôn ngữ như Java, ActionScript, C, C # … để kể tên một số. Các từ tuần tự hóa và khử tuần tự hóa có lẽ là những từ phổ biến nhất, nhưng bạn sẽ nghe/có thể đọc ở đâu đó các từ tuyến tính hóa / phân định tuyến tính hoặc thậm chí là sắp xếp theo thứ tự / không sắp xếp lại. Tuần tự hóa, tuyến tính hóa, sắp xếp theo thứ tự (deserialize, tương ứng và phân định không theo thứ tự) xác định các khái niệm về tuần tự hóa và giải tuần tự hóa. Nói theo cú pháp, tuần tự hóa dữ liệu được phản ánh bằng cách sử dụng hàm serialize(), hành động ngược lại dẫn đến unserialize(). Hãy xem một số ví dụ Tuần tự hóa/giải tuần tự hóa một biến số nguyênphp ';
Tuần tự hóa/khử tuần tự hóa một mảng (Array)
php ';
array(5) {
Tuần tự hóa và hủy tuần tự hóa một đối tượng
php
string (181) "O: 7:" Sleeper ": 4: {s: 7:" * _age "; i: 19; s: 14:" * _HeadCap"; b: 1; s: 25:"FavoriteColor";s:6:"_tastes";a:3:
Phương pháp ma thuật __sleep() và __wakeup()
object (Sleeper) # 2 (4) {
__ ngủ và __ thức dậy trong PHP là gì?
Như đã mô tả, __sleep() được gọi khi bạn tuần tự hóa() một đối tượng và __wakeup() sau khi bạn hủy tuần tự hóa() nó . Tuần tự hóa được sử dụng để duy trì các đối tượng. Bạn sẽ nhận được một đại diện của một đối tượng dưới dạng một chuỗi mà sau đó có thể được lưu trữ trong $_SESSION , cơ sở dữ liệu, cookie hoặc bất kỳ nơi nào khác mà bạn muốn.
__thức dậy() trong PHP là gì?
Phương thức ma thuật __wakeup của PHP nên được dùng để khởi tạo đối tượng được tạo lại sau khi hàm unserialize được gọi . Mã khôi phục hoặc tạo lại các loại tài nguyên PHP phải ở đây, cũng như mã khôi phục bất kỳ loại thuộc tính cần thiết nào khác không được phương thức __sleep trả về.
Phương thức isset() và phương thức ma thuật __ isset() trong PHP là gì?
Hàm isset() kiểm tra xem giá trị đã được đặt hay chưa . Hàm _isset() là một phương thức kỳ diệu trong PHP. Bất kỳ chức năng nào có " _ " ở đầu đều là một phương thức kỳ diệu trong PHP.
|
