新類是原始對象的子類你如何複製一個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. 對象不能轉換爲類型MyCustomType
- 6. 對象不能轉換爲類型「customObject」
- 7. 如何將類對象複製到另一個類對象
- 8. 複製MVC模型類對象的值到另一個對象
- 9. Microsoft Access - 將對象屬性複製到同一類型的另一個對象
- 10. 如何將JavaScript對象轉換爲另一種類型的對象?
- 11. 如何對C#中的對象類型進行強制轉換?
- 12. 將類類型對象轉換爲Intptr
- 13. c#對象類型轉換
- 14. 對象類型轉換
- 15. 對象類型轉換
- 16. 如何將一個對象轉換爲數組對象?
- 17. 如何在創建相同類型的另一個對象時複製一個tkinter對象的選項?
- 18. 轉換對象爲對象
- 19. 複製NOT NULL,而不是從一個對象到另一個相同類型的對象空字段(對象是同一類型)在Java中
- 20. 如何將對象轉換爲不從其繼承的類型?
- 21. 將對象列表中的對象從同一個類複製/設置爲另一個對象
- 22. 將對象類型轉換爲Objective-C中的子類對象類型C
- 23. 將對象轉換爲其他類型
- 24. 如何將對象類型轉換爲短類型? (C#)
- 25. 如何在Java中將對象類型轉換爲int類型?
- 26. 如何將COM對象類型轉換爲Excel.Checkbox類型
- 27. 如何將對象轉換爲泛型?
- 28. 如何將類mysqli_result的對象轉換爲json對象
- 29. Enum.Parse不能隱式地將類型'對象'轉換爲存在顯式轉換(你缺少一個轉換嗎?)
- 30. POJO對象不轉換爲JSON對象
這是更少我目前的解決方案。我想我不能指望任何其他魔法來做到這一點。 – 2008-09-23 07:26:38