新類是原始對象的子類你如何複製一個PHP對象轉換爲不同的對象類型
它需要PHP4兼容
回答
你可以有你類實例化爲空,然後通過任意數量的方法加載。其中一個方法可以接受的父類作爲參數的一個實例,然後從那裏
class childClass extends parentClass
{
function childClass()
{
//do nothing
}
function loadFromParentObj($parentObj)
{
$this->a = $parentObj->a;
$this->b = $parentObj->b;
$this->c = $parentObj->c;
}
};
$myParent = new parentClass();
$myChild = new childClass();
$myChild->loadFromParentObj($myParent);
我可以想象你會不得不發明某種「複製構造函數」。然後,您只需創建一個新的子類對象,同時傳入原始對象。
最好的方法是在子類中創建一個克隆的方法,讓你可以這樣做:
$myvar = $subclass->clone($originalObject)
另外,它聽起來就像你可以看看Decorator模式php example
沒有去PHP4,除非我自己實現克隆 – 2008-09-23 07:26:02
複製其數據PHP對象不是一大堆的數組不同,因爲所有PHP 4的對象變量是公開的,你可以做一些亂七八糟的東西,像這樣:
function clone($object, $class)
{
$new = new $class();
foreach ($object as $key => $value)
{
$new->$key = $value;
}
return $new;
}
$mySubclassObject = clone($myObject, 'mySubclass');
它不漂亮,它的certianly不是我認爲是很好的做法,但它是可重複使用,這是非常整潔。
你可以用一些黑魔法做到這一點,雖然我會嚴肅地質疑爲什麼你首先有這個要求。這表明你的設計有嚴重的錯誤。
儘管如此:
function change_class($object, $new_class) {
preg_match('~^O:[0-9]+:"[^"]+":(.+)$~', serialize($object), $matches);
return unserialize(sprintf('O:%s:"%s":%s', strlen($new_class), $new_class, $matches[1]));
}
這是受到相同的限制的serialize在一般情況下,這意味着,對其他對象或資源的引用都將丟失。
認真的,它的工作原理。但是怎麼樣?! – Alfa 2015-05-11 04:55:09
- 1. 如何參數類型轉換爲不同的對象類型
- 2. 如何將對象轉換爲來自同一基類的不同對象?
- 3. 複製不同類型的對象
- 4. 將值從一個對象複製到另一個對象(不同類型)
- 5. 如何將類對象轉換爲通用對象類型?
- 6. 將對象轉換爲不同的類
- 7. 不兼容的類型:對象不能轉換爲另一個對象?
- 8. 不同類型的同一個對象
- 9. 如何使用Type對象將對象類型的對象轉換爲Type對象引用的類型
- 10. 如何將「ppp」對象轉換爲多類型對象?
- 11. 如何將對象類型列表轉換爲對象數組
- 12. 對象不能轉換爲類型「customObject」
- 13. 對象不能轉換爲類型MyCustomType
- 14. 對象不能轉換爲類型「Sys.Component」
- 15. 如何將類對象複製到另一個類對象
- 16. 複製MVC模型類對象的值到另一個對象
- 17. Microsoft Access - 將對象屬性複製到同一類型的另一個對象
- 18. 對象類型的轉換
- 19. 將泛型類型轉換爲對象
- 20. 無效的LINQ強制轉換異常同一對象類型
- 21. 如何將JavaScript對象轉換爲另一種類型的對象?
- 22. 如何對C#中的對象類型進行強制轉換?
- 23. 將類類型對象轉換爲Intptr
- 24. c#對象類型轉換
- 25. 對象類型轉換
- 26. 對象類型轉換
- 27. 轉換對象類型
- 28. 類型轉換對象
- 29. 強制轉換對象類型在Java
- 30. 如何將一個對象轉換爲數組對象?
這是更少我目前的解決方案。我想我不能指望任何其他魔法來做到這一點。 – 2008-09-23 07:26:38