2010-04-10 28 views
6

đây là một định nghĩa của marshaling từ Wikipedia:

Trong khoa học máy tính, marshalling (tương tự như serialization) là quá trình chuyển các đại diện bộ nhớ của một đối tượng đến một dữ liệu định dạng phù hợp cho việc lưu trữ hoặc truyền tải. Nó thường được sử dụng khi dữ liệu phải được di chuyển giữa các phần khác nhau của chương trình máy tính hoặc từ một chương trình này sang chương trình khác.

Tôi luôn thực hiện tuần tự hóa dữ liệu trong php thông qua chức năng tuần tự hóa của nó, thường là trên các đối tượng hoặc mảng. Nhưng làm thế nào là định nghĩa của wikipedia của marshaling/serialization diễn ra trong serizalize() chức năng này?

Trả lời

3

Điều serialize không làm là định nghĩa lớp truyền tải. Khi unserializing một đối tượng, định nghĩa lớp của đối tượng phải có mặt (được tải từ cơ sở mã), nếu không unserializing sẽ thất bại. Từ the Wikipedia article you mention:

Để "soái" một đối tượng có nghĩa là để ghi lại trạng thái và codebase (s) của nó theo cách như vậy mà khi đối tượng marshalled là "unmarshalled", một bản sao của đối tượng ban đầu thu được, có thể bằng cách tự động tải các định nghĩa lớp của đối tượng. Bạn có thể sắp xếp bất kỳ đối tượng nào có thể tuần tự hóa hoặc từ xa. Marshalling cũng giống như serialization, ngoại trừ marshalling cũng ghi lại codebases. Marshalling là khác với serialization trong đó marshalling xử lý các đối tượng từ xa đặc biệt.

Nếu tôi hiểu chính xác, Serialize chắc chắn không tương thích 100% với định nghĩa về marshaling theo khía cạnh đó. Tôi không biết một cơ chế được xác định trước sẽ làm điều này trong PHP. Tôi đoán bạn sẽ phải kết hợp dữ liệu tuần tự hóa và tất cả các định nghĩa lớp cần thiết thành một gói (ví dụ như tệp ZIP).

1

Giống như Pekka đã đề cập ở trên, PHP không bao gồm định nghĩa lớp, do đó, nó không làm marshaling. Tuy nhiên, nếu lớp cho đối tượng được tuần tự hóa có mặt thì câu trả lời cho câu hỏi của bạn là có: serialization dễ dàng như serialize($abc).

Cách tốt nhất mà tôi biết để quản lý marshaling trong PHP là sử dụng công cụ của bên thứ ba như Google Buffer Protocols hoặc Facebook (Apache?) Tiết kiệm, sẽ tuần tự hóa và sắp xếp cho bạn. Loại một cách xoay vòng để làm điều đó (và miễn là bạn có lớp hiện tại, bạn không cần phải sắp xếp lại), nhưng họ có lẽ là giải pháp tốt nhất cho vấn đề.

Các vấn đề liên quan