Kiểm tra khử mã hóa PHP

Một trong những điều thú vị về việc lưu thể hiện của một 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 cùng với các thuộc tính của nó vào một 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 còn lại sẽ được gọi sau khi lớp được hủy kích hoạt, đ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 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 khử miền

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 nối tự động với chuỗi được trả về—không có chuỗi sau, PHP sẽ không biết lớp nào cần khử 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 đang được khử từ 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 khử mã hóa 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 đã được khử cực tiểu bằng cách sử dụ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ì đó

Sê-ri hóa và tùy chỉnh Ô tô

Bạn sẽ không tải về một chiếc xe hơi? . 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 đang bật và màu

Khi nó unerializes, 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 thể hiện của lớp. Chết tiệt, bạn thậm chí có thể lưu chúng vào một thanh USB và khử 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 lần đó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

Làm cách nào để kiểm tra dữ liệu có được tuần tự hóa hay không trong PHP?

is_serialized[ string $data, bool $strict = true ] . boolean .

Làm thế nào để sử dụng deinialize trong PHP?

Hàm khử khởi tạo PHP[] . $data = serialize[array["Red", "Green", "Blue"]]; echo $data . " $test = deinialize[$data];

Làm cách nào để tìm nạp 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.

Làm cách nào để chuyển đổi dữ liệu được tuần tự hóa thành mảng PHP?

Như trong đoạn mã trên, mảng phức hợp được tạo và đánh số thứ tự; . Ngoài ra, mảng tuần tự hóa được mã hóa được giải mã thành mảng bằng cách sử dụng hàm urldecode[] , giống như mảng ban đầu, như chúng ta có thể thấy ở đầu ra trên.

Chủ Đề