Nouvelle classe est une sous-classe de l'objet d'origineComment copier un objet PHP dans un type d'objet différent
Il doit être php4 compatible
Répondre
Vous pourriez avoir votre Les classes instanciées sont vides puis chargées par un nombre quelconque de méthodes. L'une de ces méthodes pourrait accepter une instance de la classe parente comme argument, puis copier ses données à partir de là
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);
Je vous imagine qu'il avoir à inventer une sorte de "constructeur de copie". Ensuite, vous créez simplement un nouvel objet de sous-classe en transmettant l'objet original.
La meilleure méthode serait de créer une méthode clone sur la sous-classe afin que vous puissiez faire:
$myvar = $subclass->clone($originalObject)
Sinon il semble que vous pouvez regarder dans le modèle décorateur php example
pas aller pour PHP4, à moins que j'implémente moi-même clone –
Un objet php est pas beaucoup différent à un tableau, et puisque tout objet PHP 4 les variables sont publiques, vous pouvez faire des choses en désordre comme ceci:
function clone($object, $class)
{
$new = new $class();
foreach ($object as $key => $value)
{
$new->$key = $value;
}
return $new;
}
$mySubclassObject = clone($myObject, 'mySubclass');
ce ne est pas assez, et son certianly pas ce que je considère comme une bonne pratique, mais il est réutilisable, et il est très soigné .
Vous pouvez le faire avec un peu de magie noire, bien que je voudrais sérieusement pourquoi vous avez cette exigence en premier lieu. Cela suggère qu'il y a quelque chose qui ne va pas dans votre conception.
Néanmoins:
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]));
}
Ceci est soumis aux mêmes limitations que serialize en général, ce qui signifie que les références à d'autres objets ou ressources sont perdues.
Sérieusement, cela fonctionne. Mais comment?! – Alfa
- 1. Comment copier un objet NetStream?
- 2. Comment jeter dynamiquement un objet de type chaîne à un objet de type T
- 3. Comment convertir une image stdole.StdPicture en un type différent?
- 4. Django content-type: comment obtenir un objet?
- 5. Comment convertir un objet en type décrit par Type classe?
- 6. Transfert de données de type géographique vers un serveur différent
- 7. glutPostRedisplay dans un thread différent
- 8. Comment "cloner" un objet dans un objet de sous-classe?
- 9. Comment utiliser un modèle différent pour un navigateur différent
- 10. boucle à travers un objet qui contient un objet php
- 11. PHP/GD, comment copier un cercle d'une image à l'autre?
- 12. PHP: Compter un objet stdClass
- 13. Copier un CharArrayBuffer dans un autre CharArrayBuffer
- 14. Comment copier un fichier ouvert dans VB6?
- 15. PHP StdClass Objet accédant à un $ b
- 16. Ascx dans un dossier différent?
- 17. Comment inclure un module Perl dans un répertoire différent?
- 18. Initialiser un objet générique avec un type inconnu
- 19. Comment créer un bouton "Copier"?
- 20. Comment copier un ancêtre à un descendant
- 21. Comment appeler une méthode générique avec un objet Type donné?
- 22. Comment copier un DataTable dans un SPList SharePoint?
- 23. Comment cloner un objet dans Flex?
- 24. Comment avoir un lien dans un espace réservé ouvrir un ModalPopup dans un espace réservé différent?
- 25. Convertir générique Dictionnaire type différent
- 26. Comment créer un odbcparameter pour un type de données xml server sql pour un objet odbccommand?
- 27. Comment convertir un objet en int dans un convertisseur?
- 28. Comment compter les éléments dans un objet?
- 29. Existe-t-il un type de contenu différent pour les images avec un profil de couleur différent?
- 30. envoie un objet COM avec un type de valeur BSTR dans un message MSMQ
C'est plus de moins ma solution actuelle. Je suppose que je ne peux pas attendre d'autre magie pour faire ça. –