Làm thế nào để bạn tuần tự hóa một đối tượng trong PHP?
Một trong những điều thú vị về việc lưu phiên bản của Lớp là tuần tự hóa. Đối với những người không biết đây là cái quái gì, khái niệm này rất đơn giản. bạn có thể biểu diễn một thể hiện của một lớp dưới dạng một chuỗi, vì vậy bạn có thể lưu trữ ở bất kỳ đâu, sau đó khôi phục thể hiện từ cùng một chuỗi đó Show Điều này được thực hiện tự động trong PHP khi bạn sử dụng các phương thức $car = new Car(new OilEngine());FileHandler::set('class.txt', serialize($car));$sameCar = unserialize(FileHandler::get('class.txt')); Điều này rất hữu ích để lưu trữ các phiên bản để truy xuất sau này, chẳng hạn như tệp bên trong, cơ sở dữ liệu, trong bộ nhớ lưu trữ (như redis hoặc memcached) hoặc bất kỳ thứ gì chấp nhận văn bản Ví dụ: lưu một thể hiện của lớp Người dùng với các thuộc tính của nó vào Phiên, vì vậy sau khi điều này được truy xuất trong yêu cầu tiếp theo, chúng ta có thể khôi phục cùng một thể hiện Người dùng mà không cần phải lấy nó ra khỏi Cơ sở dữ liệu. Này, nó chỉ là một ví dụ Cách cũ để xử lý tuần tự hóaTrước PHP 5. 1, cách duy nhất để xử lý việc tuần tự hóa các lớp là sử dụng các phương thức $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());0 và $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());1 Cái đầu tiên phải trả về một mảng các thuộc tính phải được tuần tự hóa, cùng với việc “làm sạch” sâu khác, trước khi chuyển thể hiện sang quy trình tuần tự hóa mặc định của PHP. Cái khác sẽ được gọi sau khi lớp không được đánh dấu, điều này sẽ cho phép bạn sửa đổi phiên bản hiện tại để khôi phục những gì đã bị mất Giản dị? . Ngoài ra, có một số lưu ý khi sử dụng tuần tự hóa mặc định
Như bạn có thể thấy, chúng có vẻ phản tác dụng và khó hiểu, nhưng kể từ PHP 5. 1 thì không cần phải tính đến chúng nữa vì có một cách tốt hơn nhiều để xử lý tuần tự hóa Chào mừng có thể tuần tự hóaPHP có một giao diện tiện dụng được gọi là Serializable. Điều này chứa hai phương pháp bạn phải đặt, được gọi là $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());2 và $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());3, và chúng thay thế các lệnh gọi cũ mà không vi phạm khả năng tương thích ngược Chúng khá dễ hiểu, nhưng trong mọi trường hợp, đây là ý chính
Phương pháp $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());3 thoạt nhìn rất khó hiểu, nhưng không chùn bước. Như tài liệu đã nói, phương thức này hoạt động như một “hàm tạo”, nghĩa là lớp sẽ được khởi tạo bỏ qua phương thức $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());1. Nếu bạn cần một số phụ thuộc được đặt trong $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());2, phương thức unserialize sẽ phải tìm kiếm chúng theo cách thủ công hoặc (tốt nhất là) đặt chúng khi quá trình tuần tự hóa hoàn tất $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels()); Để thiết lập các phụ thuộc, một cách hay là sử dụng setters trên thể hiện của lớp chưa được đánh dấu bằng sự trợ giúp của $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());4 của $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());3 và $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());6 của $car = unserialize(FileHandler::get('class.txt'));$car->setWheels(new Wheels());5, nếu bạn cần thứ gì đó nâng cao hơn và theo mô-đun Nhưng chúng ta đang tiến lên phía trước. Hãy tuần tự hóa một cái gì đó Serializing và unserializing một chiếc xe hơiBạn sẽ không tải xuống Ô tô? . Nhìn lướt qua lớp “Xe hơi” này và bạn sẽ lưu ý rằng nó cần một Công cụ, chúng tôi cung cấp PHP 7. 4-style để đặt màu và nó đã đặt sẵn các phương thức tuần tự hóa Khi tuần tự hóa, nó sẽ thực hiện dưới dạng JSON. Trong chuỗi đó, chúng tôi sẽ đặt tên lớp Engine, nếu Engine được bật và màu Khi nó unserializes, chúng ta sẽ giải mã chuỗi JSON. Chúng tôi sẽ tạo một Công cụ mới từ tên lớp đã cho, đặt màu và khởi động công cụ nếu nó đã được khởi động Hãy kiểm tra nó trong hành động Và Voila. Không cần phải làm những điều kỳ lạ trong mã của bạn để lưu một phiên bản Lớp. Chết tiệt, bạn thậm chí có thể lưu chúng vào một thanh USB và hủy xác thực chúng trong một máy tính khác. Công nghệ
|