stdClass オブジェクトを特定のクラスにキャストする
stdClass オブジェクトを別のクラスにキャストするという概念は、PHP の機能に関する興味深い疑問を引き起こします。
提供されるサードパーティのストレージ システムは一貫して stdClass オブジェクトを返しますが、ユーザーはこれらのオブジェクトを特定のクラスの本格的なインスタンスに変換するメソッドを求める場合があります。必要な構文は次のようになります。
//$stdClass is an stdClass instance $converted = (BusinessClass) $stdClass;
手動で stdClass を配列にキャストし、それを別のクラスのコンストラクターに渡すことは可能ですが、代替のアプローチを検討することは価値があります。
によるとType Juggling に関する PHP マニュアルによると、PHP では、整数、浮動小数点数、文字列、オブジェクトなど、可能なキャストの範囲が提供されています。ただし、stdClass から特定のクラスへの直接キャストはネイティブではサポートされていません。
この要件に対処するために、開発者は stdClass から目的のクラスへの変換を実行するマッパーの作成を検討できます。あるいは、より独創的なアプローチには、次のコードを適用することが含まれます。
function arrayToObject(array $array, $className) { return unserialize(sprintf( 'O:%d:"%s"%s', strlen($className), $className, strstr(serialize($array), ':') )); }
この関数は、シリアル化されたデータを操作することによって、指定されたクラスのオブジェクトに配列をキャストしようとします。この手法は疑似キャストの形式を提供しますが、副作用が発生する可能性があり、信頼できる解決策とはみなされないことに注意してください。
オブジェクトを別のオブジェクトにキャストするには、コードを少し変更したバージョン
function objectToObject($instance, $className) { return unserialize(sprintf( 'O:%d:"%s"%s', strlen($className), $className, strstr(strstr(serialize($instance), '"'), ':') )); }
これらのカスタム関数は、stdClass オブジェクトを特定のクラスに変換するための実行可能なオプションを提供し、開発者が目的のクラス構造を損なうことなく、提供されたストレージ システムの機能を拡張できるようにします。
以上がPHP で stdClass オブジェクトを特定のクラスにキャストできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。