lớp mới là một lớp con của đối tượng gốcLàm thế nào để bạn sao chép một đối tượng PHP vào một loại đối tượng khác nhau
Nó cần phải được php4 tương thích
Trả lời
Bạn có thể có của bạn các lớp được khởi tạo rỗng và sau đó được nạp bởi bất kỳ số phương thức nào. Một trong những phương thức này có thể chấp nhận một cá thể của lớp cha làm đối số và sau đó sao chép dữ liệu của nó từ đó
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);
tôi sẽ tưởng tượng bạn sẽ phải phát minh ra một số loại "nhà xây dựng bản sao". Sau đó, bạn chỉ cần tạo một đối tượng lớp con mới trong khi truyền trong đối tượng gốc.
Phương pháp tốt nhất là để tạo ra một phương pháp nhân bản trên Subclass để bạn có thể làm:
$myvar = $subclass->clone($originalObject)
Ngoài ra nó có vẻ như bạn có thể nhìn vào Decorator Pattern php example
không dùng cho PHP4, trừ khi tôi thực hiện sao chép bản thân mình –
Một đối tượng php không khác biệt nhiều với mảng và vì tất cả đối tượng PHP 4 biến là công khai, bạn có thể làm một số công cụ lộn xộn như thế này:
function clone($object, $class)
{
$new = new $class();
foreach ($object as $key => $value)
{
$new->$key = $value;
}
return $new;
}
$mySubclassObject = clone($myObject, 'mySubclass');
của nó không đẹp, và certianly của nó không phải là điều tôi muốn xem xét để được thực hành tốt, nhưng nó là tái sử dụng, và nó là khá gọn gàng .
Bạn có thể làm điều đó với một số ma thuật đen, mặc dù tôi sẽ nghiêm túc đặt câu hỏi lý do tại sao bạn có yêu cầu này ngay từ đầu. Nó cho thấy rằng có cái gì đó nghiêm trọng sai với thiết kế của bạn.
Tuy nhiên:
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]));
}
này là tùy thuộc vào những hạn chế tương tự như serialize nói chung, có nghĩa là tài liệu tham khảo để các đối tượng hoặc các nguồn lực khác bị mất.
Nghiêm túc, nó hoạt động. Nhưng bằng cách nào?! – Alfa
- 1. Sao chép đối tượng vào một khác
- 2. AS3 - Sao chép một đối tượng
- 3. C# Sao chép Đếm từ một đối tượng này sang một đối tượng khác
- 4. Liệt kê và sao chép các thuộc tính từ một đối tượng này sang đối tượng khác cùng loại
- 5. Sao chép một đối tượng vào thiết bị?
- 6. Thêm phương thức vào một đối tượng được sao chép
- 7. Làm thế nào để sao chép đối tượng trong Qt?
- 8. cách sao chép từ một đối tượng chuỗi này sang đối tượng khác trong C++?
- 9. Làm thế nào để sao chép đối tượng js?
- 10. thay đổi 'này' con trỏ của một đối tượng để chỉ đối tượng khác nhau
- 11. Làm cách nào để sao chép/sao chép một thể hiện của đối tượng trong CoffeeScript?
- 12. Làm thế nào để bạn sao chép một BufferedImage
- 13. Sử dụng Bưu kiện để sao chép một đối tượng?
- 14. Sao chép đối tượng JSON AJAX vào đối tượng hiện có
- 15. Làm cách nào để sao chép một đối tượng (bản sao sâu) trong Dart?
- 16. Làm thế nào để bạn tải một tệp bitmap vào một đối tượng BitmapData?
- 17. Perl: Làm thế nào để sao chép sâu một đối tượng may mắn?
- 18. Làm cách nào để sao chép đối tượng JAXB
- 19. Làm thế nào để điền vào một đối tượng trong PHP từ một Array
- 20. làm thế nào để sao chép một đối tượng trong Android?
- 21. Làm thế nào để sao chép một đối tượng trong Flex?
- 22. Làm thế nào để bạn sử dụng một biểu tượng @ trong tên của một đối tượng PHP
- 23. Làm thế nào để vượt qua một đối tượng duy nhất [] để một đối tượng params []
- 24. Làm thế nào để sao chép các giá trị đối tượng superclass thành các giá trị đối tượng lớp con?
- 25. Làm thế nào để chuyển đổi một đối tượng String thành một đối tượng Hash?
- 26. C++ sao chép đối tượng luồng
- 27. ReSharper có thể tạo mã sao chép các thuộc tính từ một đối tượng này sang đối tượng khác không?
- 28. Làm thế nào để đưa một đối tượng vào danh sách loại chung trong F #
- 29. Làm thế nào để bấm một đối tượng với Panel.ZIndex thấp hơn một đối tượng khác trong wpf?
- 30. Làm thế nào để biết một đối tượng là một đối tượng RegExp?
Đây là giải pháp ít hơn hiện tại của tôi. Tôi cho rằng tôi không thể mong đợi bất kỳ phép thuật nào khác để làm điều này. –