PHPのserialize()関数は何ですか?




serialize php (4)

シリアライゼーションは、PHPなどの外部でデータをJavascriptなどに渡す場合に使用します。

ええ、文字列、整数、文字列をそのまま送信しますが、配列のような複雑な構造ではありません。 PHP配列をJavascriptに渡す方法については、 here 。

多くの言語で広くサポートされているJSONとしてデータをフォーマットすることもできますが、変換するときにPHPのネイティブ型と独自のクラスを緩和します。 JSONとPHPの詳細はhere 。

私はserialize()unserialize()関数について知りました。 これにはどんな用途がありますか? 私は人々がデータベースに入れるために物事をシリアル化することを知っています。 役に立ったと思われる使用例をいくつか教えていただけますか?

私もjavascriptでシリアライズされたコードを参照してください、これは同じですか? JavaScriptのシリアル化された文字列をunserialize()できますか?


私はしばしばserializeを使用してデータベースに重要な情報を格納しますが、これは新しいフィールドを作成する価値はありませんが、将来は使用することができます。

たとえば、ユーザーがいくつかの要素しか格納していないフォームをユーザーが記入しておき、後で必要とする場合に備えて保管したい場合は、フォーム要素の配列をシリアル化してデータベースに格納します。


私はしばしば、データベースにセロライズされたデータストアを見ています。私は本当にこれが好きではありません:

  • そのデータを使用してSQLで作業するのは本当に難しいです:シリアル化されたデータの条件をどうやって書いていますか? さらに困難:それをどうやって更新しますか? あなたは本当にすべての行を取り出し、それらをシリアル化し、変更し、再シリアル化し、DBに保存するPHPスクリプトを書いていますか? :-(
  • あなたのデータを別のソフトウェアに移行したい日には、データを移行するためにもっと多くの作業が必要になります(新しいソフトウェアがPHPで書かれていない場合、さらに多くの作業が必要になります

それでも、それはあまりうまく定義されていないデータを格納する簡単な方法だと私は認めます...そして、私は時々それを使用します...

シリアライゼーションのもう一つの用途は、2つのシステム間のデータ交換を容易にすることです。たとえば、ある種のWebサービスを介してオブジェクトを送信するには、何らかの方法でシリアル化する必要があります。

2つのシステムがPHPの場合、 serialize / unserializeを使用することができます。 しかし、ここでも、システムの1つがもうPHPでない場合はどうなりますか? JSONやSOAPを使用するほうがよいでしょう。最初は少し難しくなりますが、他の言語でも知られているように、より長期的な解決策になるかもしれません。

私がPHPのserialize関数を使用する一つの方法は、PHPアプリケーションキャッシュ(APCのユーザーのキャッシュのような)にデータを保存することです。オブジェクトをそのまま保存することはできません。 キャッシュは1つのアプリケーションでのみ使用されるため、多くの言語で知られている形式を使用する必要はありません。 だから、シリアライズはOKです...そして、キャッシュにデータを格納するには、本当に高速なシリアライゼーション機能を使用する必要があります。シリアライズはかなり高速です^^


PHPのserializeを使用すると、配列やオブジェクトをテキスト形式で保持できます。 $ _SESSIONのようなものに配列を代入すると、PHPはそれをテキストファイルに保存し、後でそれを再作成することができます。 Serializeは、オブジェクトや変数に対してこのように使用されます。 (オブジェクトがあらかじめ使用しているクラスを宣言しておいてください)

一方、Wordpressは、シリアライズされた配列を直接データベースに格納することによって、非常によく似た方法でそれを使用します。 キー=>値のデータベースを保持すると、これは配列の柔軟性のために非常に有益です。値のパラメータに何かを格納できます。

そして、リンクをheres(最初のcommentorの礼儀): http://us3.php.net/serialize : http://us3.php.net/serialize





serialization