stdClass オブジェクトをカスタム クラスに変換する
サードパーティのストレージ システムが stdClass オブジェクトのみを返し、それらを完全なクラスにキャストするシナリオでは、特定のクラスの本格的なオブジェクトが必要になります。ただし、PHP は、そのような変換に対する単純なキャスト方法を提供しません。
型ジャグリング
PHP の型ジャグリング機能により、次のような特定の変換が可能になります。
これらの変換は、stdClass オブジェクトを操作する場合に非常に役立ちますが、特定のクラスのインスタンスを直接作成するわけではありません。
カスタム マッパー
包括的な変換の場合、 stdClass からターゲット クラスへのキャストを実行するマッパー クラスを作成できます。これには、stdClass オブジェクトの各プロパティをターゲット クラスの対応するプロパティに変換するメソッドの定義が含まれます。
ハッキングな解決策 (注意推奨)
回避策として、次のコードは、配列とオブジェクトを特定のインスタンスに「疑似キャスト」するように適用できます。 class:
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), '"'), ':') )); }
このソリューションは、ターゲット クラスを表すようにデータのシリアル化表現を変更します。ただし、潜在的な副作用があるため、このアプローチは慎重に使用することをお勧めします。
以上がPHP で stdClass オブジェクトをカスタム クラスに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。