JSONオブジェクト to シリアライズ済みPHPオブジェクト コンバーター
多機能なPHPシリアライザー/デシリアライザーを使って、PHPでデータを簡単にシリアライズおよびデシリアライズできます。このオンラインツールは、複雑なデータ構造を保存可能な文字列に変換し、元の形式に戻したい開発者に最適です。ソフトウェアをインストールすることなく、正確かつ効率的にデータを処理できます。使いやすく信頼性の高いこのツールで、PHP開発のワークフローを改善しましょう。
よくある質問
PHPでデータをシリアライズするには、配列、オブジェクト、スカラー値などのデータ構造を入力欄に入力し、「シリアライズ」ボタンをクリックします。このツールはPHPのシリアライズプロトコルを使用して複雑なデータ構造を保存可能な文字列形式に変換するため、ファイルやデータベースへの保存、ネットワーク経由での送信が可能になります。
PHPでデータをデシリアライズするには、通常a:、s:、O:などの形式識別子で始まるシリアライズ済み文字列を入力欄に入力し、「デシリアライズ」ボタンをクリックします。このツールは文字列を元のデータ構造に戻し、配列、オブジェクト、値をシリアライズ前と同じ状態に復元します。
シリアライズは複雑なデータ構造を保存可能な文字列に変換します。これにより、ファイルやデータベースへの永続保存、ネットワーク経由のデータ送信、セッションデータの保存、キャッシュ、メッセージキューのペイロード、リクエスト間でのオブジェクト状態の保持が可能になります。デシリアライズすると、元のデータを取り出して引き続き使用できます。
PHPは文字列、整数、浮動小数点数、真偽値、配列、オブジェクト、NULL値をシリアライズします。配列のキー、オブジェクトのプロパティ(public、protected、private)、入れ子構造、データ型も保持します。ただし、データベース接続やファイルハンドルなどのリソースはシリアライズできず、別途処理が必要です。
はい。信頼できないデータをデシリアライズすると、PHPオブジェクトインジェクション攻撃が発生する可能性があります。攻撃者は、マジックメソッド(__wakeup、__destruct)を通じてコード実行を引き起こす悪意あるシリアライズ済み文字列を作成できます。検証せずにユーザー入力や外部データをunserializeしないでください。信頼できないデータにはJSONを使用するか、allowed_classes制限を設定してください。
はい。PHPはカスタムオブジェクトをシリアライズし、すべてのプロパティと値を保持します。ただし、オブジェクトを正しく復元するには、デシリアライズ前にクラス定義を読み込んでおく必要があります。オートロードやクラスファイルの読み込みを利用するか、__sleep()と__wakeup()のマジックメソッドを実装して、独自のシリアライズ処理を定義してください。
PHP serialize()はデータ型、private/protectedプロパティ、オブジェクトのクラス情報を正確に保持しますが、PHPでのみ使用できます。JSONは言語に依存せず、読みやすくウェブに適しており、あらゆる言語で使えますが、privateプロパティと正確なPHP型は保持されません。PHPのみでの保存にはserialize()を、APIや相互運用にはJSONを使用してください。
PHPはセッションデータ($_SESSION)を自動的にシリアライズし、リクエスト間で保存します。セッションに配列やオブジェクトを保存すると、PHPがそれらをファイルまたはデータベースにシリアライズし、次回以降のページ読み込み時にデシリアライズします。これにより、ページを移動してもユーザー状態、ショッピングカート、認証情報を維持できます。
はい。シリアライズ済みデータは、データベースのTEXTまたはBLOB列に保存できます。ただし、シリアライズ済みデータは効率的なクエリ、インデックス作成、検索を妨げます。オブジェクト全体をひとまとまりで保存する場合はシリアライズを使い、個々のフィールドを検索したりデータ間の関係を管理したりする場合はJSONまたは正規化テーブルを使用してください。
シリアライズ済みデータには形式を示す接頭辞があります。s:5:"hello"(文字列)、i:42(整数)、a:2:{...}(配列)、O:4:"User"(オブジェクト)のような形式です。数値は長さまたは要素数を示します。この形式はコンパクトですが、人間には読みにくいものです。デバッグやデータ操作には、このツールで読みやすいJSONとPHPのシリアライズ形式を相互変換できます。
データをデシリアライズしてその構造を検査し、デシリアライズされた値に対してprint_r()やvar_dump()を使用し、可読性のためにJSONに変換し、不完全なシリアライズや破損をチェックし、オブジェクトのクラスの可用性を検証し、複雑なシリアライズされた構造を視覚化して理解するために我々のツールを使用する。
標準のPHPシリアライゼーションはクロージャをサポートしていません。この機能を使用するには、Opis ClosureやLaravelのSerializableClosureのようなパッケージを使用します。オブジェクト内の通常の関数やメソッドは、クラスで定義されていればシリアライズできますが、無名関数は特別な処理が必要です。
__sleep()はシリアライズ前に実行され、シリアライズするプロパティの配列を返します(特定のデータを除外するのに便利です)。__wakeup()はデシリアライズ後に実行され、初期化を行います。__serialize()と__unserialize()(PHP 7.4以降)を使うと、さらに細かく制御できます。クラス独自のシリアライズ処理を実装する際に利用してください。
既存のPHPデータをデシリアライズし、配列またはstdClassオブジェクトに変換してから、JSONでエンコードします。コードを更新し、serialize()/unserialize()の代わりにjson_encode()/json_decode()を使用してください。JSONはより安全で読みやすく、互換性も高い一方、シリアライズで保持されるprivateプロパティと正確な型情報は失われます。