タイプジャグリングのマニュアルを参照してください可能なキャストの。
許可されるキャストは次のとおりです。
- (int)、(integer)-整数にキャスト
- (ブール)、(ブール)-ブールにキャスト
- (float)、(double)、(real)-floatにキャストします
- (文字列)-文字列にキャスト
- (配列)-配列にキャスト
- (オブジェクト)-オブジェクトにキャスト
- (設定解除)-NULLにキャスト(PHP 5)
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), '"'), ':')
));
}