tags:

views:

655

answers:

4

I just learned about serialize() and unserialize() functions today and I think it is really cool but I am wondering what are some good uses for this? I know people serialize things to put into a database. Could you give me some example uses where it is helpful?

Also I see serialized code in javascript often, is this the same, like a serialized string in javascript can be unserialized with php unserialize() ?

+4  A: 

PHP serialize allows you to keep an array or object in a text form. When assigning arrays to things like $_SESSION, it allows PHP to store it in a text file, and then recreate it later. Serialize is used like this for objects and variables. (Just make sure you have declared the class the object uses beforehand)

Wordpress on the other hand uses it for a very similar method, by storing the serialized arrays directly in a database. If you keep a database of keys => values, this could be very beneficial because of the flexibility of arrays, you can store anything in the value parameter.

And heres the link (courtesy of first commentor): http://us3.php.net/serialize

Chacha102
http://us3.php.net/serialize
Justin Giboney
you just said _you to keep an array in a text form_ which is wrong. You can serialize any type of variable. you can serialize even an object. the only thing you need consider when you are *unserializing* an object is to have the declaration of the object you will unserialize
Gabriel Sosa
Edited for you Gabriel.
Chacha102
BTW, At the end of the paragraph I originally put that it was used for both objects and arrays.
Chacha102
+3  A: 

I often use serialize to store important information in the database that isn't worth creating a whole new field for, but could be of use in the future.

For instance, if the user fills out a form that I only store a few elements from, but I want to keep them all in case I need them later, I'll serialize the array of form elements and store it in the database.

James Skidmore
Yep, this is generally how I use it. Especially if you have an unknown number of key=>val pairs (with unknown names), its hard to build a good db structure to handle that.
Christian
@ Christian: Look at the EAV pattern. It is not difficult at all, and in fact is much more flexible, to normalize this kind of data into a database.
nlaq
I started using json for this. allow you to save the data on a *more* standar format than the php serialization
Gabriel Sosa
@Nelson: Interesting, will have a look into the EAV pattern in more depth. Thanks for letting me know!
Christian
A: 

JavaScript, unlike PHP (and many other languages) has no built in way to do serialization. This isn't really a problem, because everything that a javascript might want to talk to uses mutually incomprehensible serialization formats.

To deal with this, you will normally use a javascript library, such as jQuery, to serialize data into a format the remote host can expect to understand. This is going to almost always be one of three flavours, either html-form-encoded so that it can be sent directly to a POST handler, xml because its xml man, or JSON, because it's both human friendly and efficient.

JSON is kind of gaining a lot of traction here because on the client, if you trust the source, you can just eval() it and get the objects back. Not only that, it just happens to be nearly python, so you can sometimes even get away with the same trick on the server. More significantly, it's very compact (much shorter than equivalent XML) and very easy to parse.

TokenMacGuy
+1  A: 

I often see seralized data store in Database, and I really don't like this :

  • it's really hard to work in SQL with that data : how do you write conditions on serialized data ? Even harder : how do you update it ? Do you really write a PHP script that fetches every lines, unserialize those, modifies them, re-serialize, and stores them back in DB ? :-(
  • the day you will want to migrate your data to another software, it'll require more work to migrate the data (and be even more work if the new software is not written in PHP, btw)

Still, I admit it is an easy way to store not-well-defined data... and I do sometimes use it for that...

Another use for serialization is to facilitate data exchange between two systems : sending objects through some kind of webservice, for instance, requires them to be serialized in some kind of way.

If the two systems are PHP, you could envisage using serialize/unserialize. But, here too, what if one of the system is not PHP anymore ? Using JSON or SOAP is probably a better choice : a bit harder at first, but probably a more long-term solution, as those formats are known in other languages too.

One thing I use PHP's serialize function is to store data in cache (like APC's user's cache), in a PHP application : you cannot store objects as-is : you have to serialize them. As the cache is used only by one application, it is not necessary to use a format known by many languages ; so, serialize is OK... And, to store data in cache, you should use a really fast serialization function -- and serialize is pretty fast ^^

Pascal MARTIN