可能なキャストについては、Type Jugglingのマニュアルを参照してください。
許可されているキャストは次のとおりです。
- (int), (integer) - 整数にキャスト
- (bool), (boolean) - ブール値にキャスト
- (float), (double), (real) - float にキャスト
- (文字列) - 文字列にキャスト
- (配列) - 配列にキャスト
- (オブジェクト) - オブジェクトにキャスト
- (未設定) - NULL にキャスト (PHP 5)
stdClass から別の具象クラスへのキャストを行う Mapperを作成する必要があります。難しすぎてはいけません。
または、ハック気分の場合は、次のコードを変更できます。
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), '"'), ':')
));
}