ホームページ > バックエンド開発 > PHPチュートリアル > PHP で stdClass オブジェクトをカスタム クラスに変換するにはどうすればよいですか?

PHP で stdClass オブジェクトをカスタム クラスに変換するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-26 09:15:11
オリジナル
1063 人が閲覧しました

How to Convert stdClass Objects to Custom Classes in PHP?

stdClass オブジェクトをカスタム クラスに変換する

サードパーティのストレージ システムが stdClass オブジェクトのみを返し、それらを完全なクラスにキャストするシナリオでは、特定のクラスの本格的なオブジェクトが必要になります。ただし、PHP は、そのような変換に対する単純なキャスト方法を提供しません。

型ジャグリング

PHP の型ジャグリング機能により、次のような特定の変換が可能になります。

  • (int) または (integer) の場合整数
  • (bool) または (boolean) (boolean
  • (float)、(double)、または (real) for float
  • (string)、string
  • (配列) 配列の場合
  • (オブジェクト) の場合object
  • (未設定) for NULL (PHP 5)

これらの変換は、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート