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 đó

Đ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 serialize[$instance]unserialize[$string], bằng cách sử dụng thể hiện lớp và biểu diễn chuỗi lớp tương ứng

$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óa

Trướ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[]];
$car->setPaintJob[new PaintJob['red']];
0 và
$car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
$car->setPaintJob[new PaintJob['red']];
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

  • Thoạt nhìn, chuỗi này khó hiểu vì PHP sử dụng mã hóa kỳ lạ để giữ hình dạng Lớp
  • Bạn phải tính đến việc các thuộc tính của thể hiện lớp cũng có thể được tuần tự hóa hay không và có cách khắc phục để khôi phục chúng khi hủy tuần tự hóa

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óa

PHP 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[]];
$car->setPaintJob[new PaintJob['red']];
2 và
$car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
$car->setPaintJob[new PaintJob['red']];
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

  • $car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
    $car->setPaintJob[new PaintJob['red']];
    2 được gọi khi lớp đang được tuần tự hóa. Mục đích của nó là chuyển một biểu diễn chuỗi của Lớp sang PHP. Ví dụ: chúng ta chỉ có thể trả về danh sách thuộc tính được mã hóa JSON. Tên lớp được tự động thêm vào với chuỗi được trả về— nếu không có chuỗi sau, PHP sẽ không biết lớp nào sẽ hủy đánh dấu chuỗi sau này
  • $car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
    $car->setPaintJob[new PaintJob['red']];
    3 được gọi khi chuỗi không được sắp xếp thành Lớp tương ứng. PHP sẽ kiểm tra tên lớp trong chuỗi được tuần tự hóa, chuyển chuỗi cho phương thức này và đặt bất kỳ thứ gì mà cá thể lớp cần

Phương pháp

$car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
$car->setPaintJob[new PaintJob['red']];
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[]];
$car->setPaintJob[new PaintJob['red']];
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[]];
$car->setPaintJob[new PaintJob['red']];
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[]];
$car->setPaintJob[new PaintJob['red']];

Để 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[]];
$car->setPaintJob[new PaintJob['red']];
4 của
$car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
$car->setPaintJob[new PaintJob['red']];
3 và
$car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
$car->setPaintJob[new PaintJob['red']];
6 của
$car = unserialize[FileHandler::get['class.txt']];$car->setWheels[new Wheels[]];
$car->setPaintJob[new PaintJob['red']];
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ơi

Bạ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ệ

Lời khuyên. bạn không thể tuần tự hóa các Đóng, chủ yếu là do chúng có ngữ cảnh bên ngoài Lớp. Nó giống như nhận được một hóa đơn để thanh toán nhưng không biết cho ai. Nhưng… nếu bạn cần chức năng đó, gói SuperClosure có thể dành cho bạn

Tuần tự hóa đối tượng trong PHP là gì?

Sắp xếp theo thứ tự một đối tượng có nghĩa là chuyển đổi nó thành biểu diễn dòng phụ có thể được lưu trữ trong một tệp . Điều này hữu ích cho dữ liệu liên tục; .

Các bước để tuần tự hóa một đối tượng là gì?

Các bước chung để sắp xếp tuần tự là, .
Tạo một thể hiện của Tệp sẽ lưu trữ đối tượng được tuần tự hóa
Tạo một luồng từ đối tượng tệp
Tạo một phiên bản của BinaryFormatter
Gọi phương thức tuần tự hóa của cá thể truyền luồng và đối tượng để tuần tự hóa

Làm cách nào để lấy dữ liệu tuần tự hóa trong PHP?

Để nhận các giá trị POST từ serializeArray trong PHP, hãy sử dụng phương thức serializeArray[] . Phương thức serializeArray[ ] tuần tự hóa tất cả các biểu mẫu và thành phần biểu mẫu giống như. serialize[] nhưng trả về cấu trúc dữ liệu JSON để bạn làm việc với.

Chức năng nào được sử dụng để tuần tự hóa một đối tượng?

Lớp ObjectOutputStream chứa phương thức writeObject[] để tuần tự hóa một Đối tượng. Lớp ObjectInputStream chứa phương thức readObject[] để giải tuần tự hóa một đối tượng.

Chủ Đề